在基于CWinThread的类CMyThread中,我这样定义了一个消息:
   #define WM_MYHELLO  (WM_USER + 10 )   afx_msg LONG myHello(UINT , LONG );   ON_THREAD_MESSAGE(WM_MYHELLO, myHello) LONG CMyThread::myHello(UINT wParam, LONG iParam)
{
AfxMessageBox("hello");
return 0;
}然后在外部利用发消息,
   CThreadDemoApp * MainApp = (CThreadDemoApp *)AfxGetApp();
MainApp->PostThreadMessage(WM_MYHELLO,0,0);
为什么运行不到myHello函数里面呢?

解决方案 »

  1.   

    你的CmyTread类有实例吗?(就是new CMyThread),如果没有,进程由于没有资源空间,你PostThreadMessage是无效的。
      

  2.   

    CRuntimeClass* prt = RUNTIME_CLASS( CMyThread );
    m_pThr = (CMyThread *)AfxBeginThread(prt);我用上面的AfxBeginThread ,如果new放在哪里呢?
      

  3.   

    呵呵,前面的错了.象你这样用,首先要保证CMyThread 派生于CWinThread.
    另外一个,MainApp->PostThreadMessage(WM_MYHELLO,0,0);有问题:
    线程之间的通讯用这个函数:
    PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM lParam)
    MSDN上有它的用法
      

  4.   

    CThreadDemoApp * MainApp = (CThreadDemoApp *)AfxGetApp();
    MainApp->PostThreadMessage(WM_MYHELLO,0,0);不对,应该是
    CMyThread *pThread;
    pThread=AfxBeginThread(.......)
    pThread->PostThreadMessage(WM_MYHELLO,0,0);