c++多线程之AfxBeginThread
MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程//创建工作线程CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParam,int nPriority = THREAD_PRIORITY_NORMAL,...
·
MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程
,另一个用于工作者线程
,分别有如下的原型和过程
//创建工作线程
CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
参数1 线程的入口函数,声明一定要如下: UINT MyThreadFunction( LPVOID pParam );
参数2 传递入线程的参数,注意它的类型为:LPVOID,所以我们可以传递一个结构体入线程.
参数3、4、5分别指定线程的优先级、堆栈大小、创建标识、安全属性,含义同用户界面线程
//创建界面线程
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
参数1是从CWinThread派生的RUNTIME_CLASS类;
参数2指定线程优先级,如果为0,则与创建该线程的线程相同;
参数3指定线程的堆栈大小,如果为0,则与创建该线程的线程相同;
参数4是一个创建标识,如果是CREATE_SUSPENDED,则在悬挂状态创建线程,在线程创建后线程挂起,否则线程在创建后开始线程的执行。
参数5表示线程的安全属性,NT下有用。
实例
//加载消息显示
UITheard = (CMsgUIThread*) AfxBeginThread(RUNTIME_CLASS(CMsgUIThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (UITheard == NULL)
{
MessageBox(NULL, _T("无法显示") MB_OK | MB_ICONSTOP|MB_APPLMODAL|MB_TOPMOST);
return false;
}
if (!UITheard->IsKindOf(RUNTIME_CLASS(CMsgUIThread)))
{
AfxMessageBox(_T("UI显示失败!"),MB_TOPMOST);
ASSERT(0);
return false;
}
UITheard->ResumeThread();//运行该线程
定义CMsgUIThread
#pragma once
#include "MsgTest1.h"
#include "MsgTest2.h"
class UIThread : public CWinThread
{
DECLARE_DYNCREATE(UIThread)
public:
UIThread(void);
~UIThread(void);
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
protected:
DECLARE_MESSAGE_MAP()
public:
MsgTest1Dlg g_Dlg1;
MsgTest2Dlg g_Dlg2
};
更多推荐
所有评论(0)