MFC多线程编程

MFC多线程编程

ID:37711663

大小:69.55 KB

页数:20页

时间:2019-05-29

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

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

1、MFC多线程编程1.线程的基本概念进程和线程都是操作系统的概念。进程是应用程序的执行实例。每个进程是由私有的虚拟地址空间、代码、数据和其它系统资源组成的。进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。线程是进程内部的一个执行单元。系统创建进程后,实际上就是启动了该进程的主执行线程,它以函数地址的形式(比如main或WinMain函数),将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。每个进程至少有一个主执行线程,它无需由用户主动创建,而是由系统自动创

2、建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。多线程可以实现并行处理,避免了某项任务长时间占用CPU。单CPU运行多线程时,操作系统为每个线程安排一些CPU时间,轮换方式向线程提供时间片,这就给人一种假象,似乎这些线程在同时运行。由此可见,如果两个非常活跃的线程为了抢夺CPU的控制权,在线程切换时会消耗很多CPU资源,反而会降低系统性能。这点要在

3、编程时注意。创建线程共三种方法:(1)WIN32API的CreateThread()(2)MFC全局函数AfxBeginThread()(3)CWinThread::CreateThread()2.WIN32API多线程2.1WIN32API多线程函数1.HANDLECreateThread(//方法一LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,

4、DWORDdwCreationFlags,LPDWORDlpThreadId);2.DWORDSuspendThread(HANDLEhThread);//挂起指定的线程3.DWORDResumeThread(HANDLEhThread);//结束线程的挂起状态,执行线程4.VOIDExitThread(DWORDdwExitCode);//主要在线程的执行函数中被调用,终结线程自身的执行5.BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);//强行终止线程,一般不建议使

5、用:(1)是不安全的,可能会引起系统不稳定;(2)虽然该函数立即终止线程,但并不释放线程所占用的资源。6.BOOLPostThreadMessage(DWORDidThread,UINTMsg,WPARAMwParam,LPARAMlParam);//将一条消息放到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。如果接收消息的线程没有创建消息循环,则该函数执行失败。1.DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);//功能:在某一线程(创建

6、子线程的线程)中调用,线程暂时挂起,系统监视hHandle(子线程句柄)所指向的对象的状态。返回:如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个特殊值:0和INFINITE。若为0,立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态。2.2例程MultiThread1使用Wi

7、n32API编写多线程。1.建立基于对话框的工程,在对话框中加入两个按钮和一个编辑框,两个按钮的ID分别是IDC_START、IDC_STOP,标题分别为“启动”,“停止”,IDC_STOP的属性选中Disabled;编辑框IDC_TIME的属性选中Readonly;2.在MultiThread1Dlg.h中添加线程函数声明voidThreadFunc();(应在类CMultiThread1Dlg声明外部)3.在类CMultiThread1Dlg内部添加protected型变量:HANDLEhThread;//线程句柄DW

8、ORDThreadID;//线程ID4.在MultiThread1Dlg.cpp文件中添加全局变量m_bRun:volatileBOOLm_bRun;//代表线程是否正在运行volatile修饰符:告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局

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

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

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