【发布时间】:2011-01-18 05:31:29
【问题描述】:
我有一个 MFC 文档/视图 C++ 图形应用程序,该应用程序将其所有绘图都绘制到屏幕外位图,然后将其复制到 OnDraw 方法中提供的 CDC 指针。在过去的几天里,我一直在寻找将绘图组件放在单独的工作线程中,这样它就不会停止 GUI。当我这样做时,我似乎得到了相当数量的 MFC GDI 相关断言,例如,
VERIFY(::MoveToEx(m_hAttribDC, x, y, &point)
那么几个问题;
- 在 MFC 和 GDI 中使用工作线程是否有任何问题?
- 是否存在跨线程使用 MFC GDI 对象的问题?
- GDI 对象是否必须在线程本地声明?
虽然问题可能与资源/锁定有关,但绘图线程有自己的证明 CDC 和 CBitmap 用于所有绘图,并且仅当它通过独占访问时才将位图复制回主线程互斥体。该代码还通过直接调用而不是作为单独的线程进行了测试,以证明问题确实与线程有关。
【问题讨论】:
标签: c++ multithreading mfc gdi