
请问主线程跟用户界面线程如何使用同步机制?
------Solutions------
你检查一下是不是程中有向其他线程发送sendmessage,造成互相等待
------Solutions------
难倒大家了
------Solutions------
gz!
------Solutions------
你不说主副关系谁知道怎么回事啊,有可能是主和副同时调用了WAITFORSINGLEEVENT(),而谁都是无限等待有没有SLEEP辅助。
最好有代码,否则无法给你检查出问题出在那里的。
------Solutions------
老兄,我和你碰到的问题一模一样,具体描述是这样的:
在主线程中有一个费时很长的函数,为了给用户一点提示,开了一个线程,在其中显示一个对话框告诉用户相关信息。这个对话框必须等到主线程的函数返回之后才能消失。
我是这样做的,假设主线程的耗时函数叫做LongTimeFunc,所显示的对话框的类名是CMyDialog,其中m_hEvent是对话框的一个成员变量,类型是HANDLE,WM_CLOSE_DIALOG是一个自定义的消息,用来让线程关闭对话框。
voidCMyDialog::DoSomething()
{
CMyWaitThread*pWaitThread=(CMyWaitThread*)AfxBeginThread(RUNTIME_CLASS(CMyDialog));
LongTimeFunc();
WaitForSingleObject(m_hEvent,INFINITE);
pWaitThread->PostThreadMessage(WM_CLOSE_DIALOG,0,0);
}
voidCMyDialog::LongTimeFunc()
{
m_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
//Dothetime-cunsumingwork
//......
SetEvent(m_hEvent);
}
可是程序就卡在WaitForSingleObject上,永远也不返回。我不知道是不是在ui线程中用WaitForSingleObject进行同步有问题,望各位高手赐教。
------Solutions------
我的代码是这样的:
在主线程中发送消息给用户界面线程,然后等待用户界面线程的完成
主线程为:
{
ResetEvent(m_hEvent);
PostThreadMessage(nUIThreadID,WM_TEST,(WPARAM)m_hEvent,0);
WaitForSingleObject(m_hEvent,INFINITE);
}
用户界面线程为:
LRESULTOnTest(WPARAMwParam,LPARAMlParam)
{
...//处理
SetEvent((HANDLE)wParam);
return0L;
}
可是一调用WaitForSingleObject整个应用程序都阻塞了。
------Solutions------
设置等待霎时间。在while循环中处理消息。
--------------------------------------------
一点浩然气,千里快哉风
--------------------------------------------
------Solutions------
tolovelypengpeng(鹏鹏):
试试这样:
m_hEvent改为g_hEvent(全局变量),
主线程为:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23463-1.html
应该说靠本本分分挣钱
你马云没错
畜生