如果用AfxBeginThread()启动worker线程,只能是启动一个函数,即便是启动UI线程,在CWinThread继承的类的,也有很大的限制,其实CWinThread是相当灵活的。
先说AfxBeginThread内部做的工作:
1、在heap中配置一个新的CWinThread对象
2、调用CWinThread::CreateThread()并设定相关属性,使线程以挂起状态产生
3、设定线程优先权
4、调用CWinThread::ResumeThread()
原代码为:
CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority, UINT nStackSize, DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs)
{
#ifndef _MT
pfnThreadProc;
pParam;
nPriority;
nStackSize;
dwCreateFlags;
lpSecurityAttrs;
return NULL;
#else
ASSERT(pfnThreadProc != NULL);
CWinThread* pThread = DEBUG_NEW CWinThread(pfnThreadProc, pParam);
ASSERT_VALID(pThread);
if (!pThread->CreateThread(dwCreateFlags|CREATE_SUSPENDED, nStackSize,
lpSecurityAttrs))
{
pThread->Delete();
return NULL;
}
VERIFY(pThread->SetThreadPriority(nPr