这是一个Windows窗体应用程序。我有一个函数,它捕获一些鼠标事件,直到满足一个条件。例如,在函数返回之前,我想等待用户在窗口的工作区中选择一个点(或者使用Esc键取消操作)。我使用以下结构:
Application::AddMessageFilter(someFilter);
while(someFilter->HasUserSelectedAPoint_Or_HitEscapeKey()){
Application::DoEvents();
}
Application::RemoveMessageFilter(someFilter);除了在控制进入while循环时占用几乎100%的CPU使用率之外,这种方法工作得非常好。我正在寻找一个类似如下所示的替代方案:
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);使用IMessageFilter和DoEvents的正确方式是什么?在收到消息之前,我如何将控制权交给操作系统?在托管世界中有没有与GetMessage相当的东西?
发布于 2009-01-07 09:58:49
您可以在两次DoEvents()调用之间让线程休眠500ms左右。尝试不同的值,看看哪种值是正确的。
https://stackoverflow.com/questions/419776
复制相似问题