02创建MFC用户界面线程

AfxBeginThread
AfxBeginThread有两个重载版本:一个用于用户界面线程,一个用于辅助线程。其中用户界面线程通常用于处理用户输入和响应用户事件,这些行为独立于执行应用程序他部分的线程。

下面列举创建用户界面线程的函数声明

CWinThread* AfxBeginThread(

CRuntimeClass* pThreadClass,

int nPriority=THREAD_PRIORITY_NORMAL,

UINT nStackSize=0,

DWORD dwCreateFlags=0,

LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);


pThreadClass:从CWinThread派生的类的RUNTIME_CLASS.

nPriority:(可选)所需的优先级别。默认值为正常优先级。

nStackSize:(可选)所需的线程堆栈大小。默认值与创建线程的堆本大小相同。

dwCreateFlags:(可选)CREATE_SUSPEND,如果希望在挂起状态中创建线程。默认值为0,即正常启动线程。

lpSecurityAttrs:(可选)所需的安全属性。默认值与父线程具有相同的访问权。


创建用户界面线程时,必须首先从CWinThread派生类。必须使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏声明并实现此类。此类必须重写某些函数,也可以重写其他函数。下表列出这些函数及其用途

函数 用途
ExitInstance 线程终止时执行清除
InitInstance 执行线程实例初始化。必须重写
OnIdle 执行线程特定的闲置时间处理。通常不重写
PreTranslateMessage 将消息调度到TranslateMessage和DispatchMessage之前对其进行筛选。通常不重写。
ProcessWndProcException 截获由线程的消息和命令处理程序引发的未处理异常。通常不生写
Run 控制线程的函数。包含消息泵。一般不重写。


BOOL CUIThread::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	CUIDlg  *pDlg=new CUIDlg;
	pDlg->Create(IDD_DIALOG1);								//创建非模态对话框
	pDlg->ShowWindow(SW_SHOW);							//显示对话
	m_pMainWnd = pDlg;										//将对话框设为主窗口
	return TRUE;
}

int CUIThread::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	if(m_pMainWnd!= NULL)
		delete m_pMainWnd;	//删除动态指针
	return CWinThread::ExitInstance();
}
void CUIThreadDemoView::OnUiThread() 
{
	// TODO: Add your command handler code her	//使用AfxBeginThread函数启动用户界面线程
	CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread),0,0,NULL);	
}





你可能感兴趣的:(command,null,mfc,dialog,attributes,initialization)