我想创建一个简单的游戏循环。我正在考虑这两个版本:
v.1:
while (continueRunning) {
PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
TranslateMessage(&msg);
DispatchMessage(&msg);
if (WM_QUIT == msg.message) {
continueRunning = false;
}
// run the game logic
}
Run Code Online (Sandbox Code Playgroud)
和 v.2:
while(continueRunning)
{
// peek for messages
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_QUIT)
continueRunning = false;
}
// run the game logic
}
Run Code Online (Sandbox Code Playgroud)
什么是更好的解决方案?是否需要有PeekMessage在while循环像在第二个例子?
我写了一个简单Win32 App的Visual Studio的2019对10场。在WinMain函数内的主消息循环中,我有:
while (Msg.message != WM_QUIT) {
if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) > 0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
swprintf_s(msgbuf, _T("In the PeekMessage loop cnt: %d, msg: %d\n"), loop_cnt++, Msg.message);
OutputDebugString(msgbuf);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
In the PeekMessage loop cnt: 0, msg: 799
In the PeekMessage loop cnt: 1, msg: 49300
In the PeekMessage loop cnt: 2, msg: 96
In the PeekMessage loop cnt: 3, msg: 96
In the PeekMessage loop cnt: …Run Code Online (Sandbox Code Playgroud)