多线程--event同步.pdfVIP

  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文档。上传文档
查看更多
多线程--event同步

多线程--同步(事件 Event) 事件分为两类:人工重置, 自动重置 人工重置时,所有等待线程都变为有信号状态。并且持续保持有信号状态,除 非显式调用 ResetEvent(g_hEvent); 自动重置则不。所以人工重置不利于做线程同步。 创建事件 g_hEvent = CreateEvent(NULL, false, false, NULL); param1:安全级别,设置为 NULL, 取得默认值 param2:人工重置(true), 自动重置(false) param3:事件状态 有信号(true) 无信号(false) param4:事件名称,如果匿名设置为 NULL 一般采用自动重置方式。如果事件状态如果设置为 false 要使用 SetEvent(g_ hEvent);设置为有信号 设置为有信号 SetEvent(g_hEvent); 设置为无信号 ReSetEvent(g_hEvent); #i nclude windows.h #i nclude iostream.h extern int tickets; //事件对象 HANDLE g_hEvent; DWORD WINAPI thread_Event_Fun1Proc( LPVOID lpParameter) { while (true) { WaitForSingleObject(g_hEvent, INFINITE); //取得事件对象 if (tickets0) { Sleep(1); coutthread1: tickets--endl; } else break; SetEvent(g_hEvent); //设置为有信号 } return 0; } DWORD WINAPI thread_Event_Fun2Proc( LPVOID lpParameter) { while (true) { WaitForSingleObject(g_hEvent, INFINITE); //取得事件对象 if (tickets0) { coutthread2: tickets--endl; } else break; SetEvent(g_hEvent); //设置为有信号 } return 0; } void thread_Event() { HANDLE handle1 = CreateThread(NULL, 0, thread_Event_Fun1Proc, NULL, 0, NULL); HANDLE handle2 = CreateThread(NULL, 0, thread_Event_Fun2Proc, NULL, 0, NULL); CloseHandle(handle1); CloseHandle(handle2); //创建事件对象 //第 2 参数指设置为非人工重置(false) (注意不要使用人工方式,比较麻烦) //第 3 参数指设置为无信号(false) g_hEvent = CreateEvent(NULL, false, false, NULL); //设置为有信号 SetEvent(g_hEvent); //设置为无信号 //ReSetEvent(g_hEvent); Sleep(200); CloseHandle(g_hEvent); } void main() { thread_Event(); cout++Event++endl; } 命名事件对象 void thread_Event() { HANDLE handle1 = CreateThread(NULL, 0, thread_Event_Fun1Proc, NULL, 0, NULL); HANDLE handle2 = CreateThread(NULL, 0, thread_Event_Fun2Proc, NULL, 0, NULL); CloseHandle(handle1); CloseHandle(handle2); //创建事件对象 //第 2 参数指设置为非人工重置(false) (注意不要使用人工方式,比较麻烦) //第 3 参数指设置为无信号(false) g_hEvent = CreateEvent(NULL, false, false, tickets);

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档