根据我发现的所有信息,GDI+可以以多线程的方式使用,但GDI+对象不能同时从多个线程中使用。
我的C++ main应用程序中有两个线程偶尔崩溃的问题(一个是启动时关心启动窗口,另一个是执行初始化操作的主线程)。这些崩溃是不可复制的,但有一个共同点:在程序在调试器中停止时,这两个线程中至少有一个处于GDI+操作中。
这里有人对GDI+线程有了解吗?
发布于 2020-02-04 03:00:56
最好使用“双缓冲区”机制为每个映射创建2个存储器直流s,逐个使用。也就是说,当后台线程在存储器DC B上绘制时,主窗口读取存储器DC A以供显示,并在绘图完成时通知主线程。在通知主线程之后,交换A和B (B被显示,A是下一个后台线程操作的对象)。
您可以在一个线程上调用GdiplusStartup,在另一个线程上调用GdiplusShutdown,只要在调用GdiplusShutdown之前删除所有GDI+对象(或让它们超出作用域)。
该文档还包含了其他一些用法。它还提到如何在GDI+中使用动态数据交换(DDE):
如果要初始化应用程序的GDI+ (通过在InitInstance函数中调用InitInstance),则必须取消GDI+后台线程。
https://stackoverflow.com/questions/60040720
复制相似问题