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

waitforsingleobject_setevent_创建线程函数(3)

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

while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))

{

//Ifit'saquitmessage,we'reoutofhere.

if(msg.message==WM_QUIT)

returnFALSE;

//Otherwise,dispatchthemessage.

DispatchMessage(&msg);

}//EndofPeekMessagewhileloop.

//Waitforanymessagesentorpostedtothisqueue

//orforoneofthepassedhandlesbesettosignaled.

result=MsgWaitForMultipleObjects(1,&m_hEvent,

FALSE,INFINITE,QS_ALLINPUT);

if(result!=WAIT_OECT_0)

continue;

else

returnTRUE;

}

}

------Solutions------

sunbo(),你试过吗?你的代码是从msdn上抄的吧,可是不知道行不行。

------Solutions------

不用Event,试用一下Mutex(互斥体对象)。

------Solutions------

Mutex也试过了,不行。

setevent_创建线程函数_waitforsingleobject

------Solutions------

tolovelypengpeng(鹏鹏):

在DispatchMessage(&msg);前

少了个TranslateMessage(&msg);

------Solutions------

1、在辅助线程中是否给主线程发送了消息。如有,则主线程在WAITFORSINGLEOECT时不会响应任何消息。

2、如允许,则改造主线程:

voidCMyDlg::CloseThread()

{

if(WaitForSingleObject(m_hKill,30)==WAIT_TIMEOUT){

PostMessage(WM_USER_CLOSETHREAD);

}

}

//WM_USER_CLOSETHREAD消息函数

voidCMyDlg::OnCloseThread(WPARAMwParam,LPARAMlParam)

{

if(WaitForSingleObject(m_hKill,30)==WAIT_TIMEOUT){

PostMessage(WM_USER_CLOSETHREAD);

}

}

------Solutions------

lovelypengpeng(鹏鹏)

应该不会阻塞界面线程,问题可能不是在event,而是你的消息处理上,检查消息是否收到,不行的话先用postmessage试试

punpuny()

你的Event用得很奇怪,但也不应该有问题,你在Waitfor..()之前setEvent一下,看看还阻塞吗?

------Solutions------

punpuny():

试着将m_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL)房到构造函数中。

lovelypengpeng(鹏鹏):

你的问题很奇怪。同意楼上的,“你在Waitfor..()之前setEvent一下,看看还阻塞吗?”

------Solutions------

首先,看不懂你的程序在做什么,SORRY,

其次,我觉得应该用SETEVENT代替RESETEVENT,CREATE完成后应该SETEVENT()一下

最后,将EVENT变量全局化,不要用线程参数来传递。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23463-3.html

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

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