VC中CWinThread类以及和createthread API的区别分析
本文实例讲述了VC中CWinThread类以及和createthread API的区别分析,分享给大家供大家参考。具体分析如下:
CWinThread
CObject 
 └CCmdTarget 
    └CWinThread
CWinThread对象代表在一个应用程序内运行的线程。运行的主线程通常由CWinApp的派生类提供;CWinApp由CWinThread派生。另外,CWinThread对象允许一给定的应用程序拥有多个线程。
CWinThread支持两种线程类型:工作者线程(Worker Thread)和用户界面线程(UI thread)。工作者线程没有收发消息的功能(没有消息队列):例如,在电子表格应用程序中进行后台计算的线程。
用户界面线程具有收发消息的功能,并处理从系统收到的消息。CWinApp及其派生类是用户界面线程的例子。其它用户界面线程也可由CWinThread直接派生。
CWinThread类的对象存在于线程的生存期。如果你希望改变这个特性,将m_bAutoDelete设为FALSE。
要使你的代码和MFC是完全线程安全的,CWinThread类是完全必要的。框架使用的用来维护与线程相关的信息的线程局部数据由CWinThread对象管理。由于依赖CWinThread来处理线程局部数据(Thread Local Storage),任何使用MFC的线程必须由MFC创建。例如,由运行时函数_beginthreadex创建的线程不能使用任何MFC API。
为了创建一个线程,调用AfxBeginThread函数。根据你需要工作者线程还是用户界面线程,有两种调用AfxBeginThread的格式。如果你需要用户界面线程,则将指向你的CWinThread派生类的CRuntimeClass的指针传递给AfxBeginThread。如果你需要创建工作者线程,则将指向控制函数的指针和控制函数的参数传递给AfxBeginThread。对于工作者线程和用户界面线程,你可以指定可选的参数来修改优先级,堆栈大小,创建标志和安全属性。
AfxBeginThread线程将返回指向新的CWinThread对象的指针。
与调用AfxBeginThread相反,你可以构造一个CWinThread派生类的对象,然后调用CreateThread。如果你需要在连续创建和终止线程的执行之间重复使用CWinThread对象,这种两步构造方法非常有用。
CWinThread类成员
数据成员
m_bAutoDelete                      指定线程结束时是否要销毁对象  
m_hThread                             当前线程的句柄  
m_nThreadID                         当前线程的ID  
m_pMainWnd                         保存指向应用程序的主窗口的指针  
m_pActiveWnd                       指向容器应用程序的主窗口,当一个OLE服务器被现场激活时 
构造函数
CWinThread                           构造一个CWinThread对象  
CreateThread                          开始一个CWinThread对象的执行 
操作
GetMainWnd                          查询指向线程主窗口的指针  
GetThreadPriority                    获取当前线程的优先级  
PostThreadMessage               向另外的CWinThread对象传递一条消息  
ResumeThread                       减少一个线程的挂起计数  
SetThreadPriority                   设置当前线程的优先级  
SuspendThread                     增加一个线程的挂起计数 
可重载函数
ExitInstance                         重载以进行线程终止时的清理工作  
InitInstance                           重载以实现线程实例的初始化  
OnIdle                                   重载以进行线程特定的空闲操作  
PreTranslateMessage           在消息被发送到Windows函数TranslateMessage和DispatchMessage之前过滤消息  
IsIdleMessage                      检测特定的消息  
ProcessWndProcException    截获线程消息和命令处理函数出现的所有未处理的异常  
ProcessMessageFilter           在特定的消息到达应用程序之前截获消息  
Run                                       线程的具有消息收发功能的控制函数,可重载以定制缺省的消息循环 
AfxBeginThread和CreateThread具体区别
- 上一篇:MFC设置对话框焦点的方法简述
- 下一篇:windows消息和消息队列实例详解





