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

UI线程和工作者线程需要考虑同步有关问题吗

2013-03-21 
UI线程和工作者线程需要考虑同步问题吗?本帖最后由 kxltsuperr 于 2013-03-11 18:21:36 编辑我在CSDN高手

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
[解决办法]
我认为只有当多个线程需要访问共同的资源的时候才有处理同步、互斥的必要,楼主的程序显然没有这种情况
[解决办法]
你没有直接的业务表明需要同步啊。

也就是需求不明确。

另外,考虑到你代码过程,开个线程处理可以帮助你减少界面卡主的情况。

热点排行