我可以在switch(messages)语句的同时运行while()吗? (C ++)

时间:2017-04-29 18:28:30

标签: c++ windows while-loop

我有一个简单的程序。它看起来像这样:

bool i = fasle;

int WINAPI WinMain(HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   int nCmdShow)
{
    /*COMMENT TO REPRESENT WNDCLASSEX STUFF*/

    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CREATE:
            CreateWindow(
                TEXT("button"),TEXT("Activate"),
                WS_VISIBLE | WS_CHILD,
                10,
                100,
                100,
                50,
                hwnd,
                (HMENU) 1,
                NULL, NULL
                );
            CreateWindow(
                TEXT("button"),TEXT("Deactivate"),
                WS_VISIBLE | WS_CHILD,
                10,
                250,
                100,
                50,
                hwnd,
                (HMENU) 2,
                NULL, NULL
                );
            break;
        case WM_COMMAND:
            if(LOWORD(wParam) == 1){
                i = true;
            }
            if(LOWORD(wParam) == 2){
                i = false;
            }
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}

无论怎样,我想要一段时间的声明。循环看起来像这样:

while(1)
{
    if(i == true)
    {
        /*DO STUFF*/
    }
}

在哪里可以将循环添加到我的代码中以使其永久运行?

1 个答案:

答案 0 :(得分:2)

  

在哪里可以将循环添加到我的代码中以使其永久运行?

在另一个主题中。

抱歉,这是GUI的一个事实。 Win32 GUI编程模型是事件驱动的,在事件驱动的系统中,您无法在GUI线程上执行长时间运行,因为GUI线程永远不会有机会处理任何消息。

所以,你必须在不同的线程中移动你的无限(或甚至只是很长)的循环。

然而,这很可能是X-Y问题。 (http://xyproblem.info/