什么是消息阀?

Microsoft777 2008-04-30 04:56:34
刚才在百度和 google 搜索了一下
没有找到相关的资料
我想解决在进程执行过程中狂占CPU的问题
哪位哥哥看看能解决不
小弟这里先谢谢了
...全文
155 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Microsoft777 2008-05-05
  • 打赏
  • 举报
回复
消息泵和消息阀是同一个概念

BOOL GetMessageMap()
{
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
::DispatchMessage (&msg);

return TRUE;
}

把消息循环改成这样
herman~~ 2008-05-03
  • 打赏
  • 举报
回复
sleep();
abupie 2008-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iGoo 的回复:]
不要用这样的方式获取消息
while( 1 )
{
getmessage();
domessage();
}
这是一个busy loop

要用这样的方式
收到消息的线程
ThreadRecvMessage()
{
// 1:将消息放入队列,注意同步保护
// 2:发送事件
SetEvent(hEvent);
}

while( WaitForSingleObject( hEvent, INFINITE ) == WAIT_OBJECT_0 )
{
getmessage();
domessage();
}
[/Quote]很清楚了。
Microsoft777 2008-05-02
  • 打赏
  • 举报
回复
自己顶一下!
Microsoft777 2008-05-02
  • 打赏
  • 举报
回复
while( 1 )
{
getmessage();
domessage();
}

在哪里啊?
solo_coder 2008-05-02
  • 打赏
  • 举报
回复
帮顶一下,

我曾经这样做过 :



while(1)
{
sleep(200);
getmessage();
domessage();
}


让消息处理线程(该程序是多线程的程序,有消息处理分发线程,界面处理线程,工作线程)sleep下,
效果也还可以。



如果没有记错的话,
我记得我以前维护过的一个商业上要求可靠性,性能很高的程序中,
也只是让消息线程sleep等待一下(具体实现是用select函数实现让线程放弃对cpu资源的占用),而没有用到event这样的通告机制,
该程序实际工作也很稳定。
Microsoft777 2008-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iGoo 的回复:]
不要用这样的方式获取消息
while( 1 )
{
getmessage();
domessage();
}
这是一个busy loop

要用这样的方式
收到消息的线程
ThreadRecvMessage()
{
// 1:将消息放入队列,注意同步保护
// 2:发送事件
SetEvent(hEvent);
}

while( WaitForSingleObject( hEvent, INFINITE ) == WAIT_OBJECT_0 )
{
getmessage();
domessage();
}
[/Quote]
还是不太懂
while( 1 )
{
getmessage();
domessage();
}
消息循环在 MFC 下应该是被封装了。

ThreadRecvMessage()
{
// 1:将消息放入队列,注意同步保护
// 2:发送事件
SetEvent(hEvent);
}

while( WaitForSingleObject( hEvent, INFINITE ) == WAIT_OBJECT_0 )
{
getmessage();
domessage();
}
这些应该加载哪里呢
iGoo 2008-04-30
  • 打赏
  • 举报
回复
是windowsAPI,可以用的
其实这就是MS倡导的,消息驱动
没事别没头没脑的Get
Microsoft777 2008-04-30
  • 打赏
  • 举报
回复
我是在 MFC 下
这些也适用吗
OpenHero 2008-04-30
  • 打赏
  • 举报
回复
WaitForSingleObject还有其他几个返回结果~最好用一个switch 处理
iGoo 2008-04-30
  • 打赏
  • 举报
回复
不要用这样的方式获取消息
while( 1 )
{
getmessage();
domessage();
}
这是一个busy loop

要用这样的方式
收到消息的线程
ThreadRecvMessage()
{
// 1:将消息放入队列,注意同步保护
// 2:发送事件
SetEvent(hEvent);
}

while( WaitForSingleObject( hEvent, INFINITE ) == WAIT_OBJECT_0 )
{
getmessage();
domessage();
}
OpenHero 2008-04-30
  • 打赏
  • 举报
回复
不知道 mark一下~

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧