【发布时间】:2012-01-13 10:51:44
【问题描述】:
我希望有两个线程来处理 Windows 消息。一个用于客户端区域中的键/鼠标输入(该线程还负责游戏逻辑),另一个用于其余的,因为我正在制作游戏并且某些消息导致 DefWindowProc() 阻塞(从而冻结游戏)。
我怎样才能做到这一点?
【问题讨论】:
-
DefWindowProc并没有真正“阻止”......它非常快。你能举一个导致阻塞的示例消息吗? -
最好保留现有设计,而是在后台线程上运行缓慢的响应以避免游戏冻结。
-
如果您正在移动或调整窗口大小,DefWindowProc 会阻塞,直到您释放鼠标按钮
-
您可以执行一个简单的测试,看看这是否真的如此。使用 SetTimer 创建一个计时器,然后处理 WM_TIMER 消息。尝试调整窗口大小,看看您是否停止接收消息。你应该会发现你仍然得到它们。
-
有一些多人游戏的工作经验 - 如果游戏在用户尝试移动/调整窗口大小时冻结有什么大不了的?只要游戏时钟跟上下一个渲染帧的实际时间,您应该能够处理这个问题。只需将其视为系统“打嗝”(无论如何都会不可避免地发生)。在激烈的游戏过程中,用户会很快发现不要弄乱窗口。