首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IMessageFilter和DoEvents的模式操作

使用IMessageFilter和DoEvents的模式操作
EN

Stack Overflow用户
提问于 2009-01-07 09:53:02
回答 1查看 685关注 0票数 1

这是一个Windows窗体应用程序。我有一个函数,它捕获一些鼠标事件,直到满足一个条件。例如,在函数返回之前,我想等待用户在窗口的工作区中选择一个点(或者使用Esc键取消操作)。我使用以下结构:

代码语言:javascript
复制
Application::AddMessageFilter(someFilter);
while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){
    Application::DoEvents();
}
Application::RemoveMessageFilter(someFilter);

除了在控制进入while循环时占用几乎100%的CPU使用率之外,这种方法工作得非常好。我正在寻找一个类似如下所示的替代方案:

代码语言:javascript
复制
Application::AddMessageFilter(someFilter);
while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){
    // Assuming that ManagedGetMessage() below is a blocking
    // call which yields control to the OS
    if(ManagedGetMessage())
        Application::DoEvents();
}
Application::RemoveMessageFilter(someFilter);

使用IMessageFilterDoEvents的正确方式是什么?在收到消息之前,我如何将控制权交给操作系统?在托管世界中有没有与GetMessage相当的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-01-07 09:58:49

您可以在两次DoEvents()调用之间让线程休眠500ms左右。尝试不同的值,看看哪种值是正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/419776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档