none
AfxBeginThread启动一个线程的执行,但主线程却在执行此函数后没有返回,这是为什么? RRS feed

  • 问题

  • 代码摘要如下:

    UINT CdecryptDlg::Test(LPVOID pParam)
    {
      m_critSect.Lock();
      if (m_pUsername == "")
      {
        m_critSect.Unlock();
        return 0;
      }
      m_critSect.Unlock();

      ...

      return 0;
    }

    void CdecryptDlg::OnBnClickedButtonTry()
    {
      CString csCaption;

      csCaption = "Clicked?";
      AfxMessageBox ((LPCTSTR)csCaption);

      m_pBtnTry.GetWindowTextW (csCaption);

      if (csCaption == "Try")
      {
        csCaption = "Pause";
        m_pBtnTry.SetWindowTextW ((LPCTSTR)csCaption);
        UpdateData(FALSE);
        m_pWorker1 = AfxBeginThread ((AFX_THREADPROC)CdecryptDlg::Test(this), this);
      }
      else
      {
        ...
      }

      csCaption = "Clicked!";
      AfxMessageBox ((LPCTSTR)csCaption);
    }

    以上代码在VS2008环境下编译调试。"Clicked?"提示框弹出,而"Clicked!"提示框却没弹出。程序则陷入线程函数Test的长时间处理中,UI不能执行任何操作。这是为什么?该如何改呢?

    2012年9月28日 8:23

答案

  • 原来,.h和.cpp中,线程函数Test应在类CdecryptDlg定义的外部,它不应该是类CdecryptDlg的成员。
    • 已标记为答案 老笨猪 2012年9月29日 6:32
    2012年9月28日 10:41

全部回复