首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合使用GetMessage和PeekMessage

结合使用GetMessage和PeekMessage
EN

Stack Overflow用户
提问于 2013-04-05 23:41:26
回答 1查看 2K关注 0票数 4

我打算创建一个有2个窗口的小应用程序,一个带有控件的普通窗口和一个用DirectX渲染的3D窗口。对于3D窗口,建议使用PeekMessage(),因为它不会在检查消息后等待,但对于普通窗口(没有3D渲染),GetMessage()函数用于避免处理器无意义的过度使用。因此,当3D窗口处于活动状态(收到WM_ACTIVE消息)时,我想使用PeekMessage(),而当普通窗口处于活动状态时,我想使用GetMessage()

主循环看起来像这样:

代码语言:javascript
复制
NormalWindowActive = false;
Window3DActive = false;
MSG msg;

while (TRUE) {
    if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    if (NormalWindowActive) {
        if (GetMessage(&msg, NULL, 0, 0)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    } else {
        RenderWindow();
    }
}

在这些窗口的消息处理程序中,我看到了WM_ACTIVATE消息:

代码语言:javascript
复制
HWND NormalWindow, Window3D; // These windows are global vars

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    // ...
    case WM_ACTIVATE:
        if (wParam!= WA_INACTIVE) {
            if (hWnd == NormalWindow) {
                NormalWindowActive = true;
                Window3DActive = false;
            } else {
                Window3DActive = true;
                NormalWindowActive = false;
            }
        }
    break;
    // ...
}

我对TaskManager的期望是在3D窗口处于活动状态时显示应用程序繁忙(约50%的处理器使用率),而在正常窗口处于活动状态时(约5%的处理器使用率)显示应用程序不那么繁忙。当两个窗口都失去焦点时,我只看到50%的处理器使用率,但当其中任何一个窗口处于活动状态时,我看到处理器使用率为0-5%。我认为应该有所不同,所以我不确定这是否真的有效(甚至可能)。3D窗口被渲染,普通窗口也会响应事件,但处理器的使用让我感到困惑。我只是不希望这影响到3D窗口的FPS。

EN

回答 1

Stack Overflow用户

发布于 2014-08-27 10:28:30

您应该检查3D窗口是否处于非活动状态,而不是检查普通窗口是否处于活动状态。您也可以使用WaitMessage而不是GetMessage,因为它可以避免重复代码。

例如:

代码语言:javascript
复制
if (Window3DActive)
    RenderWindow();
else
    WaitMessage();

您的问题似乎是,当正常窗口处于非活动状态时,即使3D窗口处于非活动状态,消息循环也不会等待。

如果决定使用WaitMessage,还应该在PeekMessage上执行循环,因为队列中可能有多个消息,而WaitMessage直到有新消息到达时才会返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15838059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档