我在一个函数里,创建了一个线程(线程的作用的仅是创建一个窗口), 在该函数里我又马上PostMessage给这个窗口。想请教一下,关于这个线程创建的窗口是否能够及时收到函数所发的消息。若不行,用什么方法可以更好地解决这种问题。线程InitInstance如下:(创建一对话框)
                            m_pPersonInfoDlg=new CPersonInfoDlg;
m_pPersonInfoDlg->Create(IDD_DIALOG_PERSON_INFO, CWnd::GetDesktopWindow()); 
m_pPersonInfoDlg->ShowWindow(SW_SHOW); 
m_pMainWnd=m_pPersonInfoDlg; 函数如下
             {
CWinThread *pWinThread = AfxBeginThread(RUNTIME_CLASS(CUserThread));
::PostMessage(pWinThread->m_pMainWnd->m_hWnd, WM_PERINFO,(WPARAM)&m_PerInfo, 0);
             }

解决方案 »

  1.   

    PostMessage发送的消息放到消息队列,对应的窗口将会处理对应的消息相应函数,它是异步方式的
    如果想要同步就用SendMessage发送消息
      

  2.   

    你必须做同步,必须保证窗口建立之后再PostMessage,因为当你调用完启动新线程的函数的时候(也就是CreateThread返回之后)并不能保证线程已经把窗口建立好,如果你不进行同步的话很可能在窗口建立起来之前就进行了PostMessage操作,这样就造成PostMessage找不到指定窗口,等你的线程把窗口建立好了之后就傻傻的等待永远也不会到来的消息
      

  3.   

    可以用线程同步的方式,先启动线程,然后等窗口创建完毕了以后,再SetEvent等通知线程,然后PostMessage发送消息过去..