Visual C++程序设计教程(第二版)课件:MFC的进程和线程.ppt

Visual C++程序设计教程(第二版)课件:MFC的进程和线程.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

11.4.3工作者线程的创建工作线程经常来完成一些后台工作,如计算,打印等,这样用户就不必因为计算机在从事繁杂而耗时的工作而等待。需要向AfxBeginThread()函数提供线程函数的起始地址和传给线程函数的参数。线程函数的格式如下:UNIT函数名(LPVOIDpParam)11.4.4创建用户界面线程用户界面线程的创建有两种方法。方法一是首先从CWinThread类派生一个类(需要用宏DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE对该类进行声明和实现),然后调用函数AfxBeginThread()创建CWinThread派生类的对象进行初始化,启动线程执行。方法二先通过构造函数创建类的一个对象,然后由程序员调用函数CWinThread::CreateThread来启动线程。通常CWinThread类的对象在该线程的生存期结束时将自动终止,如果程序员希望自己来控制,则需要将m_AutoDelete设为FALSE。这样在线程终止之后,CWinThread类对象仍然存在,此时需要手动删除CWinThread对象。11.5线程之间的通信线程通信一般有四种方式:全局变量方式,消息传递方式,参数传递方式和线程同步方式。全局变量方式:在一个进程中共享全局变量就可以通过全局变量来进行线程间的通信参数传递方式:主线程在创建子进程的时候,可以通过传给线程函数的参数和其通信。所传递的参数是一个32位的指针,该指针可以指向简单的数据,也可以指向结构甚至更复杂的数据类型。通过参数的传递能在两个线程函数之间传递很复杂的数据。消息传递法:通过函数在主线程和工作线程之间传递消息,通过函数在用户界面线程和其他线程之间传递消息,消息传递是一种很重要的线程之间的通信方式。线程之间通信的一种重要的方法就是线程同步,将在下一节给予介绍。11.6线程的调度和同步Win32提供了一组对象用来实现多线程的同步。它们是Critical_section(关键段),Event(事件),Mutex(互斥对象),Semaphores(信号量)。MFC封装了这几个同步对象,它们分别是:CCritical_section、Cevent、Cmutex、Csemaphores。这四个同步类都以CsyncObject为它们的父类。11.6.1临界段对象临界段对象一次只允许一个线程取得一个数据区进行操作。这时候可以创建临界段对象,并且使用这个临界段对象进行相应的操作以实现线程的同步。定义一个临界段对象。临界段对象的变量类型是CRITICAL_SECTION:CRITICAL_SECTION对象名;然后调用函数InitializeCriticalSection初始化该对象。初始化时把对象设置为NOT_SINGALED,表示允许线程使用资源:函数说明如下:InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);11.6.1临界段对象(续)进入和离开临界区。如果一段程序代码需要对某个资源进行同步保护,则这是一段临界段代码。在进入该关键段代码前调用EnterCriticalSection函数,这样,其他线程都不能执行该段代码,若它们试图执行就会被阻塞。完成关键段的执行之后,调用LeaveCriticalSection函数,其他的线程就可以继续执行该段代码。如果该函数不被调用,则其他线程将无限期的等待。VOIDEnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);VOIDLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);两个函数的参数lpCriticalSection是指向CRITICAL_SECTION结构的指针。11.6.2互斥对象互斥对象的工作方式和临界段对象非常相似,其区别在于互斥量不仅保护一个进程内的共享资源,而且保护系统中进程之间的资源,它是通过互斥量提供一个互斥量名来实现进程和线程之间共享协调的。在使用互斥量进行同步线程前,必须首先创建互斥量可以调用CreateMutex函数创建互斥量,其函数说明如下:HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpM

文档评论(0)

ning2021 + 关注
实名认证
内容提供者

中医资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月10日上传了中医资格证

1亿VIP精品文档

相关文档