C++ 如何在主线程繁忙时获取所有mousemove事件Windows MFC++;

C++ 如何在主线程繁忙时获取所有mousemove事件Windows MFC++;,c++,windows,mfc,mousemove,C++,Windows,Mfc,Mousemove,我在mousemove事件上有一个很长的CPU操作。在这段时间里,似乎没有新的mousemove事件发送到我的应用程序,这使得鼠标位置发生了很大的变化 我以为mouseevents会排成一个队列,然后全部发送到我的应用程序,但事实似乎并非如此 我想从设备上获得尽可能高的mousemove事件分辨率-无论应用程序是否正在忙于处理某些事情 我应该把我的应用程序放在一个工作线程中,让我的主线程只处理事件吗?是否有更简单的方法查看“原始”鼠标输入。您有几个选项: 正如您提到的,将处理放在工作线程中,让

我在mousemove事件上有一个很长的CPU操作。在这段时间里,似乎没有新的mousemove事件发送到我的应用程序,这使得鼠标位置发生了很大的变化

我以为mouseevents会排成一个队列,然后全部发送到我的应用程序,但事实似乎并非如此

我想从设备上获得尽可能高的mousemove事件分辨率-无论应用程序是否正在忙于处理某些事情


我应该把我的应用程序放在一个工作线程中,让我的主线程只处理事件吗?是否有更简单的方法查看“原始”鼠标输入。

您有几个选项:

  • 正如您提到的,将处理放在工作线程中,让Windows消息在主线程中传输。这可能是最传统的方法,最合乎逻辑的设计
  • 使用和可随时获取鼠标状态,而不依赖于Windows消息循环。换句话说,每N毫秒中断一次繁忙的任务,以轮询和记录鼠标状态。我不建议这样做,因为您将绕过系统的消息处理进行轮询
  • 每当您希望允许消息通过时,都会启动消息循环。从Visual Basic中思考
    DoEvents
    。我只是不推荐这个;这是其中一件“感觉简单”但实际上增加了复杂性的事情,这会让你只想放弃你的代码并正确地重写它

我应该将我的应用程序放在一个工作线程中吗?是的。我结合了这些选项—将GetCursorPos单独放在一个线程中。工作完美-甚至比我在没有CPU负载的单个线程中运行Windows事件时更灵敏的鼠标位置!无论CPU负载有多重或帧速率有多慢,最终报告一个平滑的鼠标路径都是非常棒的。谢谢