我要在一个while循环里面等消息(其实只是等一个变量改变数值,我可将这个做成一个自定义消息发出来),怎么才能够让这个while自动停下来等待,只是隔几秒自动检测一次看数值有没有变(有变执行,没变化继续等)或者有消息到达就继续执行while循环。我用WaitForSingleObject和MsgWaitForMultipleObjects试了试,就是不知道参数HANDLE hHandle,该怎么设。
解决方案 »
- 怎样删除程序运行时的临时文件而不被360等杀毒软件拦截
- 求助下,vc用ADO怎么连网络数据库!
- 大家进来看下,对话框上控件随窗体大小变化而变化的怪异现象?
- 如何通过服务启动一个程序
- MFC中的CInternetSession和CFtpConnection类如何通过一个代理服务器和其他主机建立连接!我到处找资料,没一个人知道!郁闷!
- vc6.0中,如何调试动态调用的dll? 代码都有的!
- 完成端口中GetQueuedCompletionStatus的问题
- 请问:如何在程序中为计算机建立一个用户?用哪一个API?
- 如何获得主视图的指针!
- 请问微软有没有提供linux或unix下的开发方案???
- 从摄像头取得的数据能否是视频流?
- CTreeCtrl上打勾的问题
{
if(...)
{} //得到消息
else
{
Sleep(0); // 线程让出cpu
}
}
建议用多线程,在一个单独的线程中检测消息。
while(GetMessage(&Msg,NULL,0,0)>0)
{
...
}
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
..WaitForSingleObject(hEvent, INFINITE);然后在变量改变后调用:
SetEvent(hEvent);
就可以了
HANDLE myevent=CreateEvent(NULL, TRUE, FALSE, _T("event"));UINT MyworkThread(LPVOID lparam)
{
WaitForSingleObject(myevent,INFINITE);
//do something u want}在适当位置用AfxBeginThread(MywrokThread,(Void *)NULL);开启这个线程然后再变量改变后使用语句:
SetEvent(hEvent);
即可
{
}
就可以了,在其他线程里设置bWait让它停下来
我做了个最简单的例子做实验,可是没有试通,请指点一下。
我定义了个全局的HANDLE hEvent;在OnInitDialog()里面hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); flag = 1.
然后再button里面做while(flag){WaitForSingleObject(hEvent, INFINITE);}.
接着在LButtonDown事件里面设flag = 0; SetEvent(hEvent);
可是程序没有任何反映,调试了一下。程序就停在WaitForSingleObject(hEvent, INFINITE);一直不动了。
把while去掉
{
DoEvents();
}void CMyView::OnLButtonDown(..)
{
flag = 0;
}
void DoEvents()
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return;
}