Windows中的C++异步函数

C++ asynchronous function in Windows

本文关键字:函数 异步 C++ 中的 Windows      更新时间:2023-10-16

我带着一个实验项目回来了,这个项目开始于:我有一个由10000个POINT类型的元素组成的数组。它们应该是x和y坐标的像素,绘制在窗口上(SetPixel())。我创建了一个简单的函数来创建DC,从数组中获取每个POINT并将其绘制在屏幕上:

void draw_points() {
    HDC hdc = GetDC(hWnd);
    for (int i = 0; i < 10000; i++) {
        SetPixel(hdc, points[i].x, points[i].y, RGB(0, 0, 0));
    }
    ReleaseDC(hWnd, hdc);
}

好吧,我把这个函数放在WinMain()函数的主循环中。它有效。我可以看到屏幕上正在画的点。问题是,当显示这些点时,我不能做任何其他事情,所以我发现我需要异步函数,比如Java中的异步函数。这是因为我希望能够在draw_points()函数运行时添加、删除和修改数组中的点。

我不需要它的任何结果,我只想让它在另一个线程中运行,同时用其他函数做我想做的任何事情。所以,我的问题是:Windows API为我提供了什么?通常的做法是什么?我需要一些外部图书馆吗?我只是不知道该怎么开始。我希望你明白我想要什么。谢谢

您不应该从主循环中调用它。相反,您应该在窗口消息循环中收到WM_PAINT事件时调用它。

您无法执行任何操作的原因是您没有响应Windows消息。您应该在循环中放入PeekMessage()调用,以定期检查消息队列。当您得到一个时,您需要调用TranslateMessage()和DispatchMessage()。