CreateThread这个函数创建线程总出问题?是不是有些变量要全局的
最后用AfxBeginThread替代解决了问题
有些人说最好不要用CreateThread函数  为什么在MFC里就有问题呢?

解决方案 »

  1.   

    CreateThread是全局API,如果在类里面使用用好了自然没问题,但是缺乏安全检查等,MFC是开源的,你看下AfxBeginThread的实现
    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(nPriority));
    if (!(dwCreateFlags & CREATE_SUSPENDED))
    VERIFY(pThread->ResumeThread() != (DWORD)-1); return pThread;
    #endif //!_MT)
    }对API封装,有很多的安全控制逻辑