请问如何在循环获取窗口消息的同时执行其它程序?

今天在写程序的时候遇到了一个很让我困惑的点:
#include "graphics.h"
#include "stdio.h"

int main() {
        //创建绘图窗口
    initgraph(800, 600, 1);
    setlinecolor(WHITE);
    setfillcolor(WHITE);
    fillrectangle(50, 50, 100, 100);
        //打印“hello”
    printf("hello");
        //中断
    system("pause");
    return 0;
}
上面的程序,是先创建了一个绘图窗口,然后再打印hello,但是理论上讲,创建的窗口需要while循环获取消息才能不断更新,像下面的程序:
#include 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
    HWND hwnd;
    MSG msg;

    ZeroMemory(&wc, sizeof(WNDCLASSEX));

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 255));
    wc.lpszClassName = "WindowClass";

    RegisterClassEx(&wc);

    hwnd = CreateWindowEx(0,
                          "WindowClass",
                          "Hello, World!",
                          WS_OVERLAPPEDWINDOW,
                          300,
                          300,
                          500,
                          400,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    

    /*消息循环*/
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    HDC hdc;
    PAINTSTRUCT ps;
    switch (msg) {
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            Rectangle(hdc, 100, 100, 200, 200);
            EndPaint(hwnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }

    return 0;
}
如果把while循环获取消息处的代码去除掉,就会让窗口无响应:

img

但事实是,easyx的图形库创建出绘图窗口时:

img

做到了在不断循环获取窗口消息的同时执行了system("pause");这句语句,而这句语句也不会影响到获取窗口消息,请问它们是怎么做到同时执行的?求解答,感谢。

这种情况,建议多线程。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1071622
  • 你也可以参考下这篇文章:电脑上的文件删除不掉,需要管理员权限怎么办?
  • 除此之外, 这篇博客: 软件工程-什么是热重载,如何使用热重载?中的 使用热重载更新正在运行的代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. 基于支持的应用程序类型打开项目。 有关 .NET 的详细信息,请参阅

    .NET 应用程序支持
  • 确保在调试器设置或调试启动配置文件中禁用“启用本机代码调试”。

  • 使用 F5 或 Ctrl+F5(如果应用程序支持)来启动附加了调试器的应用。

  • 打开包含一些代码的 C#、C++ 或 Visual Basic 代码文件,这些代码可以通过正在运行的应用程序用户界面(例如,按钮或视图模型命令的代码隐藏)重新执行或通过计时器每隔一段时间触发并更改代码。

  • 使用“热重载”按钮或按 ALT+F10 应用代码更改。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6To419Vh-1651068068854)(https://docs.microsoft.com/zh-cn/visualstudio/debugger/media/vs-2022/dotnet-hot-reload.gif?view=vs-2022)]


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^