如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第10章多线程编程10.1概述10.1.1问题的提出10.1.2进程和线程可以用VC++所带的工具Spy++来观察操作系统管理的进程和线程。打开Word应用程序和Windows附件中的“记事本”,这样系统内部就产生了两个进程。选择【Tools|Spy++】菜单命令,打开如下图所示的Spy++应用程序窗口。第10章多线程编程第10章多线程编程10.1.3MFC对多线程编程的支持从上图可以看出,MFC应用程序类CWinApp是由CWinThread类派生而来的,用于启动进程的主线程。另外,MFC还提供了支持多线程同步的同步类,如CEvent、CCriticalSection、CSemaphore和CMutex等。也提供了线程同步辅助类CSingleLock和CMutiLock。10.2线程的创建10.2.1创建工作者线程1.定义线程函数线程函数的固定形式:UINTFunctionName(LPVOIDpParam)FunctionName是用户自定义的函数名,LPVOID表示指向空类型的指针,相当于void*,必要时需要把这个指针转换成所需要的类型。函数的返回值将作为线程的结束码,线程函数结束后线程就自动终止。函数的返回值如果为0,表示线程函数正常结束。2.启动线程函数CWinThread*AfxBeginThread(AFX_THREADPROCpfnThreadProc,LPVOIDpParam,intnPriority=THREAD_PRIORITY_NORMAL,UINTnStackSize=0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL);pfnThreadProc是一个指向线程函数的指针,参数pParam的类型与线程函数的参数类型完全一致,该参数为启动线程时传递给线程函数的入口参数。其他几个参数用于设置线程优先级、线程的堆栈大小、创建时是否立即运行及线程的安全属性,这4个参数通常使用默认值。【例10.2】编写一个创建工作线程的单文档应用程序Li10_2,当执行【计算素数】菜单命令时启动一个工作线程,计算1~1000000之间素数的个数。第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程10.3线程的控制10.3.1终止一个线程10.3.2悬挂和恢复线程10.3.3线程的优先级第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程第10章多线程编程