b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

waitforsingleobject_setevent_创建线程函数

电脑杂谈  发布时间:2016-12-26 15:07:10  来源:网络整理

创建线程函数_setevent_waitforsingleobject

请问主线程跟用户界面线程如何使用同步机制?

------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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...