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