首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何启动子线程,但是不影响主窗口

2012-02-04 
怎么启动子线程,但是不影响主窗口。我的需求是这样的,主线程创建了一个子线程,子线程里有一个while loop。在

怎么启动子线程,但是不影响主窗口。
我的需求是这样的,主线程创建了一个子线程,子线程里有一个while loop。在循环期间,我发现我的主窗口没有任何响应了。。。
实现:
MainFrm.cpp

LRESULT 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中,但是不影响主窗口。

[解决办法]
while里要有可以执行一段时间的语句或延时之类的!
[解决办法]

C/C++ code
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;}
[解决办法]
在while中加个sleep(1)

热点排行