UI线程和工作者线程需要考虑同步问题吗?
本帖最后由 kxltsuperr 于 2013-03-11 18:21:36 编辑 我在CSDN高手的帮助下,写了一段小代码(MFC exe),如下:
//子线程函数
unsigned int __stdcall ThreadFun(PVOID pM)
{
int i=1;
while (i<50)
{
i=i+1;
Sleep(100);
}
AfxMessageBox("执行完毕");
return 0;
}
void CTest_WhileDlg::OnButton1()
{
//创建一个新的子线程,运行自己想要的代码
HANDLE handle=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);
CloseHandle(handle);
}
按下按钮,执行,等待一段时间,弹出“执行完毕”。运行没有问题。
但如果这样写
HANDLE handle=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);,高手们分析了这样会阻塞消息,不能加WaitForSingleObject(handle,INFINITE);这一句。
WaitForSingleObject(handle,INFINITE);
那我的问题是:UI线程和工作者线程不需要考虑同步问题吗?不要WaitForSingleObject(handle,INFINITE);这一句,会不会UI线程已经执行完毕了,而工作者线程还在执行中呢?
请高手解惑!
[解决办法]
一般来说,只要考虑界面的数据显示,而不需要考虑到数据的同步,而且,也不要在UI线程里做等待操作
[解决办法]
需要同步,只不过是如果你UI线程在死等的话,容易造成界面hung
[解决办法]
我认为只有当多个线程需要访问共同的资源的时候才有处理同步、互斥的必要,楼主的程序显然没有这种情况
[解决办法]
你没有直接的业务表明需要同步啊。
也就是需求不明确。
另外,考虑到你代码过程,开个线程处理可以帮助你减少界面卡主的情况。