这是一个Windows窗体应用程序。我有一个函数可以模态捕获一些鼠标事件,直到满足条件。例如,我想等待用户在函数返回之前在窗口的客户区中选择一个点(或者可选地使用Escape键取消操作)。我使用以下结构:
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
等价物?
答案 0 :(得分:1)
您可以在DoEvents()
次呼叫之间将线程休眠500毫秒左右。尝试不同的值,看看感觉是否合适。