线程函数设计以与MsgWaitForMultipleObjects函数使用要点.docVIP

线程函数设计以与MsgWaitForMultipleObjects函数使用要点.doc

  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文档。上传文档
查看更多
线程函数设计以与MsgWaitForMultipleObjects函数使用要点

HYPERLINK /lancidie/archive/2011/04/06/2006748.html 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点 ----- 转 使用多线程技术可以显著地提高程序性能,本文就讲讲在程序中如何使用工作线程,以及工作线程与主线程通讯的问题。 ? 一?创建线程 使用MFC提供的全局函数AfxBeginThread()即可创建一个工作线程。线程函数的标准形式为?UINT?MyFunProc(LPVOID );此函数既可以是全局函数,也可以是类的静态成员函数。之所以必须是静态成员函数,是由于类的非静态成员函数,编译器在编译时会自动加上一个this指针参数,如果将函数设置为静态的成员函数,则可以消除this指针参数。如果想在线程函数中任意调用类的成员变量(此处指的是数据成员,而不是控件关联的成员变量),则可以将类的指针作为参数传递给线程函数,然后经由该指针,就可以调用类的成员变量了。 //线程函数,类的静态成员函数 UINT CThreadTest::TH_SetProgress(LPVOID lpVoid) { ???????CThreadTest *pTest=(CThreadTest *)lpVoid; ???????pTest-SetProgress(); ???????return 0; } //类的成员函数,此函数执行实际的线程函数操作,却可以自如的调用成员数据 void CThreadTest::SetProgress() { int nCount=0; ???????while (1) ???????{ ??????????????m_progress.SetPos(nCount); //设置进度条进度 //this-SendMessage(WM_SETPROGRESSPOS,nCount,0);//也可用这种方式 ??????????????nCount++; ??????????????if (g_exitThread) ??????????????{ ?????????????????????return; ??????????????} ??????????????Sleep(200); ???????} } ? 二?线程函数体的设计 有过多线程设计经验的人都有体会,多线程设计最重要的就是要处理好线程间的同步和通讯问题。如解决不好这个问题,会给程序带来潜藏的隐患。线程的同步可以利用临界区、事件、互斥体和信号量来实现,线程间的通讯可利用全局变量和发消息的形式实现。其中事件和临界区是使用得比较多的工具。请看下面的线程函数体: UINT AnalyseProc(LPVOID???lVOID) { ???????if(WAIT_OBJECT_0== WaitForSingleObject(m_eventStartAnalyse.m_hThread,INFINITE)) ???????{ ??????????????while (WAIT_OBJECT_0 == WaitForSingleObject(m_eventExitAnalyse.m_hThread,0)) ??????????????{ ?????????????????????DWORD dRet=WaitForSingleObject(m_eventPause.m_hThread,0); ?????????????????????if (dRet == WAIT_OBJECT_0) ?????????????????????{ ????????????????????????????//暂停分析 ????????????????????????????Sleep(10); ?????????????????????} ?????????????????????else if (dRet == WAIT_TIMEOUT) ?????????????????????{ ????????????????????????????//继续分析 ????????????????????????????// ?????????????????????} ??????????????} ???????} ???????return 0; } 上面的线程函数用到了三个事件变量eventStartAnalyse、eventExitAnalyse和eventPause,分别用来控制线程函数的启动、退出以及暂停。再配以WaitForSingleObject函数,就可以自如的控制线程函数的执行,这是在线程函数体内应用事件变量的典型方式,也是推荐的方式。 无论是工作线程还是用户界面线程,都有消息队列,都可以接收

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档