初始化MFC的CThreadEx类时是不是
先运行 InitInstance() 
 然后构造函数  
然后run()   ?
谢谢了?

解决方案 »

  1.   

    先初始化CWinThread的派生类,调用派生类的构造函数。
    然后通过CWinThread的CreateThread函数创建一个线程,线程函数为_AfxThreadEntry
    以下是_AfxTheadExtry的代码
    // first -- check for simple worker thread
    DWORD nResult = 0;
    if (pThread->m_pfnThreadProc != NULL)
    {
    nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams);
    ASSERT_VALID(pThread);
    }
    // else -- check for thread with message loop
    else if (!pThread->InitInstance())
    {
    ASSERT_VALID(pThread);
    nResult = pThread->ExitInstance();
    }
    else
    {
    // will stop after PostQuitMessage called
    ASSERT_VALID(pThread);
    nResult = pThread->Run();
    }
    有上述代码可知,首先检测有没有自定义的线程函数,如有则调用线程函数,
    如没有自定义线程函数则调用InitInstance函数。如果InitInstance函数返回FALSE,则继续调用Run函数。