Windows中的C++异步函数
C++ asynchronous function in Windows
我带着一个实验项目回来了,这个项目开始于:我有一个由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()。
相关文章:
- std::异步与非静态成员函数
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- 调用boost.asio的异步函数时,线程是什么时候创建的
- Win32 函数可以在同一线程上异步运行吗?
- 窗口上信号处理程序的异步安全写入函数
- 如何使用 boost::asio io_service 运行函数异步
- 异步 60 秒延迟后C++执行函数?
- 我怎样才能把这个标准::函数传递给标准::异步
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- std::与共享指针模板化成员函数异步
- 如何在 std::future 的向量中调用异步函数
- 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池中获得返回值?
- 如何保持异步函数中使用成员的shared_ptr对象的活动状态?
- 执行异步作业的函数
- 如何声明异步函数
- 无法异步启动带有对象参数的函数
- 如何从 dart 对用 C/C++ 编写的函数进行异步调用
- 与成员函数异步
- 如何使一个函数异步信号安全
- 我如何执行一个c++函数异步而不是阻塞/等待