首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问一个有关问题,HDC在多线程下会出有关问题吗

2012-03-07 
请教一个问题,HDC在多线程下会出问题吗?我的程序最初是这样设计的:有一个主缓存离屏表面,建立在系统内存中

请教一个问题,HDC在多线程下会出问题吗?
我的程序最初是这样设计的:

有一个主缓存离屏表面,建立在系统内存中。(用的是ddraw7接口)
有数个工作线程,各控制一个离屏表面,也建立在系统内存中,主线程负责循环把各线程中的内容复制到主缓存表面,然后再统一输出到屏幕上。

后来发现我的程序中大多数情况是用DrawText,读取图片等操作,都是用gdi的方法弄到dc上,再获取surface的dc,拷贝过去,这样显得麻烦。

就把所有的东西改成gdi的了,把surface换成了dc。但是这样问题就来了,在线程中drawText函数出了问题,用surface的dc,或者改成单线程,文本都可以正常输出,但多线程中的dc就输出不了文字,并且DrawText函数返回是成功。

请问一下,HDC是不是不能在多线程下使用?surface是否完全可以在多线程下使用而没有任何隐患?

另:
1,我的线程在操作dc或者surface时是用了严谨的线程同步的。
2,线程中绘图用的dc是在主线程中建立的,用参数传给了线程。


[解决办法]
dc不是线程安全的
[解决办法]
主线程传窗口句柄给其他线程,使用到的地方GetDC,用完马上ReleaseDC()。
[解决办法]
不知道你代码是怎么写的,是主线程中GetDC,CreateCompatibleDC,把memdc作为参数传给各个线程,其他线程利用这个memdc来DrawText,完了以后主线程绘制图象,DeleteDC,ReleaseDC,是这样吗?

热点排行