计算机网络程序设计多线程技术分析报告.pptVIP

计算机网络程序设计多线程技术分析报告.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在程序中,用户创建了一个初始状态为有信号自动重置并且具有默认安全属性的匿名事件对象。 当用户创建事件对象时,如果将其初始状态设置为无信号,则需要用户手动将其设置为有信号状态。实现该功能可以调用函数SetEvent()将指定的事件对象设置为有信号状态。该函数原型如下: BOOL SetEvent(HANDLE hEvent); 该函数调用成功,则返回true。否则,将返回false。参数hEvent表示将设置的事件对象句柄。与该函数功能相反,函数ResetEvent()则将指定的事件对象设置为无信号状态,其参数及意义与函数SetEvent()相同。 当然,线程也可以通过调用函数WaitForSingleObject()主动请求事件对象。该函数原型如下: DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 该函数将在用户指定的事件对象上等待。如果事件对象处于有信号状态,函数将返回。否则,函数将一直等待,直到用户所指定的时间到达。各参数及其意义如下: 参数hHandle表示函数所等待的事件对象句柄。 参数dwMilliseconds表示该函数将在事件对象上的等待时间,如果该参数为INFINITE,则该函数将永远等待。该函数的返回值可以表明引起函数返回的原因,其部分返回值如表3.2所示。 表3.2 函数部分返回值 例如,用户使用事件对象实现线程同步编程。代码如下: 在代码中,用户主要使用了函数WaitForSingleObject()对事件对象进行请求,然后再使用事件对象相关API函数设置其有无信号状态。实例程序根据事件对象的信号状态判断线程的执行顺序以及输出全局变量a的值,如图3.7所示。 返 回 值 返回值意义 WAIT_TIMEOUT 用户指定的等待时间已过 WAIT_OBJECT_0 线程所请求的对象为有信号状态 图3.7 事件对象实现线程同步 在本小节中,向用户介绍了事件对象编程的相关API函数的原型以及参数意义,并配合实例程序讲解了这些API函数的使用方法。 2.使用CEvent类实现线程同步 CEvent类是MFC中支持事件对象编程的类。本小节将向用户讲解该类实现线程同步技术的部分常用函数以及使用方法。 首先,用调用该类构造函数创建对象。构造函数原型如下: CEvent( BOOL bInitiallyOwn = FALSE, BOOL bManualReset = FALSE, LPCTSTR lpszName = NULL, LPSECURITY_ATTRIBUTES lpsaAttribute = NULL ); 在构造函数中,参数及其意义如下: 参数bInitiallyOwn表示事件对象的初始化状态。如果该参数为true,则表示该事件对象为有信号状态。否则,该事件对象为无信号状态。默认为无信号状态。 参数bManualReset表示该事件对象是人工重置还是自动重置对象。如果该参数为true,则事件对象为人工重置。否则,事件对象为自动重置。 参数lpszName表示用户为该事件对象的命名。默认情况下为NULL。 参数lpsaAttribute表示该事件对象的安全属性。一般情况下,创建的事件对象均指定为默认安全属性。 例如,用户使用CEvent类创建对象。代码如下: ... //省略部分代码 CEvent event(true,false,NULL,NULL); //创建事件类对象 将事件对象设置为有信号或无信号状态可以分别调用函数SetEvent()和ResetEvent()。函数原型如下: BOOL SetEvent( ); //设置事件对象为有信号 BOOL ResetEvent( ); //设置事件对象为无信号 以上两个函数若调用成功,则返回true。否则,将返回false。 例如,用户使用CEvent类在程序中实现线程同步。代码如下: 在上面的程序中,用户主要使用了CEvent类的相关函数实现线程的同步。本小节主要向用户讲解如何使用API函数或者CEvent类创建事件对象,实现线程同步技术的相关方法。 3.2.3 互斥对象 互斥对象与前面所学的临界区对象和事件对象的作用一样,均用于实现线程同步。但是,互斥对象还可以在进程之间使用。在互斥对象中,包含一个线程ID和一个计数器。线程ID表示拥有该互斥对象的线程,计数器用于表示该互斥对象被同一线程所拥有的次数。在程序中,同样可以使用API函数或者MFC类操作互斥对象,实现线程同步。 1.使用API函数操作互斥对象 用户可以调用API函数CreateMutex()创建并返回

文档评论(0)

三沙市的姑娘 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档