mfc下的多线程编程

mfc下的多线程编程

ID:39972391

大小:1.20 MB

页数:30页

时间:2019-07-16

mfc下的多线程编程_第1页
mfc下的多线程编程_第2页
mfc下的多线程编程_第3页
mfc下的多线程编程_第4页
mfc下的多线程编程_第5页
资源描述:

《mfc下的多线程编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、MFC下的多线程编程作者:陈帅2008年7月30日一、MFC支持的两种线程:1.用户界面线程通常用于处理用户输入及响应用户生成的事件和消息,并独立地相应正在应用程序其他部分执行的线程产生的消息和时间,并包含一个消息泵(aMessagePump)。用户界面线程包含一个消息处理的循环,以应对各种事件。对于用户来说工作线程运行在后台。这就使得工作线程特别适合去等待一个事件的发生。2.工作线程工作线程适用于处理那些不要求用户输入并且比较消耗时间的其他任务(如大规模的重复计算,网络数据的发送与接受)。注意:

2、在MFC应用程序中,所有的线程都是由CWinThread对象来表示的;CWinThread是用户接口线程的基类,CWinApp就是CWinThread派生出来的,在编写用户接口线程时,也需要从CWinThread类派生出自己的线程类;CWinThread同样是工作线程的基类,但在编写工作线程的时候,升值不必刻意地从CWinThread类派生出自己的线程类对象。用户可以调用MFC框架的AfxBeginThread帮助函数,会创建CWinThread对象。在Win32API中不区分两种线程,它只需要知

3、道线程的起始地址,就可以开始执行线程。3.创建MFC的工作线程(1).编程实现控制函数一个工作线程对应一个控制函数。线程执行的任务都应编写在控制函数之中。编写实现工作线程的控制函数是创建工作线程的第一步。控制函数的原型声明是:UNITControlFunctionName(LPVOIDpParam);其中,UNITControlFunctionName:是控制函数的名字,自定。参数pParam:是一个32位指针值,是启动工作线程时,有调用的AfxBeginThread()函数传递给工作线程的控制函

4、数的。这个值既可以是指向简单数据类型的指针,用来传递int之类的数值,也可是是指向包含了许多参数的结构体或其他对象的指针;甚至可以忽略它。(2).创建并启动工作线程在进程的主线程或其他线程中调用AfxBeginThread()函数就可以创建新的线程,并使线程开始运行。AfxBeginThread()函数是MFC提供的帮助函数,有两个重载版本,区别在于使用的入口参数不同。一个用于创建并启动用户接口线程,一个用于创建并启动工作线程。要创建并启动工作线程,必须采用如下的调用格式:CWinThread*A

5、fxBeginThread(AFX_THREADPROCpfnThreadProc,LPVOIDpParam,intnPriority=THREAD_PRIORITY_NORMAL,UINTnStackSize=0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL);参数pfnThreadProc:是一个指向工作线程的控制函数的指针,即控制函数的地址。创建工作线程是必须指定将在此线程内部运行的控制函数。参数pParam:是

6、一个指向某种类型的数据结构指针,执行本函数时,将把这个指针进一步传递给此线程的控制函数,使之成为线程控制函数的入口参数。参数nPriority:通常设为0。参数nStackSize:通常设为0。参数dwCreateFlags:通常设为0。参数dwCreateFlags:通常设为0。参数lpSecurityAttrs:通常设为NULL。(3)创建工作线程的例子struct{intn;double*pD;}myData;myDatass;//定义了该类型的变量,对该变量的初始化的代码省略了UNITMy

7、CalcFunc(LPVOIDpParam){//如果入口函数为空指针,终止线程if(pParam==NULL)AfxEndThread(MY_NULL_POINTTER_ERROR);intn=pParam->n;//数组元素个数;double*pD=pParam->pD;//指向数组的第一个元素;doublesum=0;//数组元素之和;for(inti=0;i

8、示字符串;AfxMessageBox(bb);//显示结果;return0;}(i)编程实现线程控制函数(2)在程序进程的主线程中调用AfxBeginThread()函数来创建并启动运行这个线程。将控制函数名和结构变量的地址作为参数来传递,其他的参数省略,表示使用默认值。AfxBeginThread(MyCalcFunc,&ss);一旦调用了此函数,线程就被创建,并开始执行线程函数。当数据的计算完成时,函数将停止运行,线程拥有的堆栈和其它的资源都将释放。CWinThread对象将被

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

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

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