请教上各位大大如何把阻塞的线程队列变成非阻塞的
请问下各位大大怎么把阻塞的线程队列变成非阻塞的?
小弟写了段线程程序,是用来完成数据安装的,现在有1到12个线程会调用小弟下面的线程程序,现在小弟使用事件完成了线程队列处理数据的问题,但它会使小弟的界面程序阻塞掉,SetText无法更新界面文字,试了发消息来显示界面文字也不行。小弟请问下各位大大怎么把阻塞的线程队列变成非阻塞的?因为小弟的程序是客户端,有界面的,小弟是新手。
------解决方案--------------------
WaitForSingleObject(evFinish,INFINITE);
修改成有消息循环的等待函数
for()
{
WaitForSingleObject(evFinish, 0);
PeekMessage
TranslateMessage
DispatchMessage
}
------解决方案--------------------
WaitForSingleObject(evFinish,INFINITE);会导致阻塞。
可以选择MsgWaitForMultipleObjects
具体的可以看看
http://blog.****.net/bianbian17556231/article/details/5382230
小弟写了段线程程序,是用来完成数据安装的,现在有1到12个线程会调用小弟下面的线程程序,现在小弟使用事件完成了线程队列处理数据的问题,但它会使小弟的界面程序阻塞掉,SetText无法更新界面文字,试了发消息来显示界面文字也不行。小弟请问下各位大大怎么把阻塞的线程队列变成非阻塞的?因为小弟的程序是客户端,有界面的,小弟是新手。
- C/C++ code
void StarInstallApp(int pos) { DWORD tempthreadid = 15; evFinish=CreateEvent(NULL,TRUE,false,NULL); g_StarInstallAppThread[15] =::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)StarInstallAppThreadProc, NULL, 0, &tempthreadid); ResumeThread(g_StarInstallAppThread[15]); WaitForSingleObject(evFinish,INFINITE); ::CloseHandle(g_StarInstallAppThread[15]); } DWORD static StarInstallAppThreadProc(LPVOID lpParameter) { AllLabel[InstallPosQueue[InstallCount]]->SetText("正在安装"); //数据处理,每次处理完的时间都不一样。 processdata(InstallPosQueue[InstallCount]); AllLabel[InstallPosQueue[InstallCount]]->SetText("安装完毕"); SetEvent(evFinish); }
------解决方案--------------------
WaitForSingleObject(evFinish,INFINITE);
修改成有消息循环的等待函数
for()
{
WaitForSingleObject(evFinish, 0);
PeekMessage
TranslateMessage
DispatchMessage
}
------解决方案--------------------
WaitForSingleObject(evFinish,INFINITE);会导致阻塞。
可以选择MsgWaitForMultipleObjects
具体的可以看看
http://blog.****.net/bianbian17556231/article/details/5382230