Windows多线程程序设计

Windows多线程程序设计

ID:27743415

大小:194.00 KB

页数:52页

时间:2018-12-05

Windows多线程程序设计_第1页
Windows多线程程序设计_第2页
Windows多线程程序设计_第3页
Windows多线程程序设计_第4页
Windows多线程程序设计_第5页
资源描述:

《Windows多线程程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Windows多线程程序设计在实际的项目开发中,我们或多或少的都接触过多线程程序的设计,有点零星的经验,以我本人的亲身经历而言,对于多线程的编程,我属于“野路子”,有点照猫画虎的意思,“借着”电脑维修之际,系统的学习了一下多线程的编程技术,现将笔记整理如下,希望对有志于学习多线程的同志们有所帮助。-------haikerenwu2009-8-1一.结束线程:可以利用GetExitCodeThread函数,该函数会传回线程函数的返回值,然而该函数的一个糟糕行为是:当线程还在进行,尚未有所谓结束代码时,它会传回TRUE表示成功,如果

2、这样第二个形参lpExitCode指向的内存区域中应该放的是STILL_ACTIVE,要注意这种行为,也就是说你不可能从其返回值中知道“到底线程还在运行还是它已结束”,而应根据lpExitCode中是否为STILL_ACTIVE来判断。For(;;){boolrc;rc=GetExitCodeThread(HANDLE,lpExitCode);If(rc&&(*lpExitCode)!=STILL_ACTIVE)//线程结束}强制结束一个线程可以利用函数voidExitThread(DWORDdwExitCode);形参指定此线程

3、之结束代码,此函数类似于cruntimelibrary中的exit()函数,因为它可以在任何时候被调用并且绝不会返回,任何代码若放在此行之下,保证不会被执行。程序启动后就执行的那个线程称为主线程,主线程有两个特点,第一,它必须负责GUI程序中的主消息循环;第二,这一线程的结束(不论是因为返回或因为调用了ExitThread)会使得程序中的所有线程都被强迫结束,程序也因此而结束,其他线程没有机会做清理工作。所以在main或winmain结束之前,应先等待所有的线程都结束。诊断宏:#pragmacomment(lib,"USER32"

4、)#include#defineMTASSERT(a)_ASSERTE(a)#defineMTVERIFY(a)if(!(a))PrintError(#a,__FILE__,__LINE__,GetLastError())__inlinevoidPrintError(LPSTRlinedesc,LPSTRfilename,intlineno,DWORDerrnum){LPSTRlpBuffer;charerrbuf[256];#ifdef_WINDOWScharmodulename[MAX_PATH];#els

5、e//_WINDOWSDWORDnumread;#endif//_WINDOWSFormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER

6、FORMAT_MESSAGE_FROM_SYSTEM,NULL,errnum,LANG_NEUTRAL,(LPTSTR)&lpBuffer,0,NULL);wsprintf(errbuf,"Thefollowingcallfailedatline%din%s:""%sReason:%s",lineno,filename,linedesc,l

7、pBuffer);#ifndef_WINDOWSWriteFile(GetStdHandle(STD_ERROR_HANDLE),errbuf,strlen(errbuf),&numread,FALSE);Sleep(3000);#elseGetModuleFileName(NULL,modulename,MAX_PATH);MessageBox(NULL,errbuf,modulename,MB_ICONWARNING

8、MB_OK

9、MB_TASKMODAL

10、MB_SETFOREGROUND);#endifexit(EXIT_FA

11、ILURE);}多线程程序设计成功的关键:(1)各线程的数据要分离开来,避免使用全局变量。(2)不要在线程之间共享GDI对象(3)确定你知道你的线程状态,不要径自结束程序而不等待它们的结束。(4)让主线程处理用户界面。二.关于Wait…()函数DWORDWaitForSingleObject(HANDLEhHandle;DWORDdwMilliseconds);参数:hHandle---等待对象的handle(代表一个核心对象)dwMilliseconds—等待的最长时间,时间终了,即使handle尚未称为激发状态,此函数还是要返

12、回,此值可以是0(代表立刻返回),也可以是INFINITE代表无穷等待。返回值:如果函数失败,则传回WAIT_FAILED,这时候你可调用GetLastError取得更多信息,此函数的成功有三个因素:1.等待的目标(核心对象)变成激发状态,这种情况

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。