这样用合适吗?
//  MyWnd.h
volatile BOOL m_bRunning;
CWinThread* m_pRun;
static UINT RunThread(LPVOID pParam);//  MyWnd.cpp
static UINT CMyWnd::RunThread(LPVOID pParam)
{
    CMyWnd* pWnd = (CMyWnd*)pParam;
    pWnd->m_bRunning = TRUE;
    ALongTimeWork();
    pWnd->m_bRunning = FALSE;
    return 0xdead;
}void CMyWnd::Run(void)
{
    if (m_bRunning == FALSE)
    {
        m_pRun = AfxBeginThread((AFX_THREADPROC)RunThread, this);
    }
}

解决方案 »

  1.   

    //  static UINT CMyWnd::RunThread(LPVOID pParam)
    UINT CMyWnd::RunThread(LPVOID pParam)
      

  2.   

    合适但不必要。因为有指针了pWnd->m_bRunning;没必要声明为volatile,加不加这个一样很准的,不信可以去试试看
      

  3.   

    有可能会出现多线程问题,比如连续调用了几次Run而RunThread还从来没有开始运行过就会发生生成了多个线程。
      

  4.   

    volatile类型在嵌入式中很有用,有时是必须的,
    在PC中就无所谓了.不过在变量前面加上volatile,
    显得很有水平啊,^-^