我的需求是这样的,主线程创建了一个子线程,子线程里有一个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中,但是不影响主窗口。
实现:
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中,但是不影响主窗口。
解决方案 »
- 如何选中最上层的窗口
- 请问如何让程序开机时自动启动,但不让其在msconfig中显示?
- ListCtrl中如何改变某一行的颜色
- 如何在DLL里面使用资源
- 有关焦点,请教各位大侠!!!!!!!!急促!
- 请问为什么getchar要设计成返回int而不是char
- 请推荐几篇关于c++中单字节(ANSI)字符、双字节(UNICODE)字符、多字节(MBCS)字符的文章,谢谢!!
- 怎么在SDI程序里的MainFrm里定义一个全局变量?
- 有一些数据点,我想把这些点连成一条曲线?最好提供源代码
- int iYype=0; 如何把它转化为 char cType;
- VisualC++网络高级编程 源代码
- vc怎样获取call的返回值?
{
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;
}