我的需求是这样的,主线程创建了一个子线程,子线程里有一个while loop。在循环期间,我发现我的主窗口没有任何响应了
实现:
MainFrm.cppLRESULT CMainFrame::OnStart(){                msgThread = (MessageLayerThread*)AfxBeginThread(RUNTIME_CLASS(MessageLayerThread), 0, 0, CREATE_SUSPENDED);                msgThread->ResumeThread();                msgThread->PostThreadMessage(ON_RUN, 0, 0);                return true;}MessageLayerThread.cpp MessageLayerThread::MessageLayerThread(){} MessageLayerThread::~MessageLayerThread(){}
BOOL MessageLayerThread::InitInstance(){                return TRUE;} int MessageLayerThread::ExitInstance(){                // TODO:  perform any per-thread cleanup here                return CWinThread::ExitInstance();} LRESULT MessageLayerThread::OnRun(WPARAM wParam, LPARAM lParam){                bool flag = false;                while(!flag){                                TRACE("\n waiting data");                }                return true;} BEGIN_MESSAGE_MAP(MessageLayerThread, CWinThread)                ON_THREAD_MESSAGE(ON_RUN, OnRun)END_MESSAGE_MAP()之前我时在MessageLayerThread的initInstance函数中,创建一个窗口,然后用postMessage给这个窗口,发现主窗口也被冻住了,我才换成直接PostThreadMessage,谁知道还是不行。正确的做法应该怎么样大牛们,知道的劳烦指出我的问题在哪里,给个例子什么的也行
我的需求就是要子线程在一个while loop中,但是不影响主窗口。

解决方案 »

  1.   

    while里要有可以执行一段时间的语句或延时之类的!
      

  2.   

    UINT __cdecl ThreadProc(LPVOID lParam)
    {
    CNewDlg dlg;
    dlg.Create(IDD_DIALOG1);
    dlg.ShowWindow(SW_SHOW); MSG msg;
    while(GetMessage(&msg, NULL, NULL, NULL))
    {
    switch(msg.message)
    {
    case ON_RUN:
    AfxMessageBox(_T("ON RUN"));
    break; default:
    break;
    }
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }LRESULT CMainFrame::OnStart()
    {
    CWinThread* pThread = AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());
    pThread->PostThreadMessage(ON_RUN, 0, 0);
            return 0;
    }