关于多线程对Bitmap绘画的问题

blabla10101 2012-08-01 11:58:42
我最开始使用多线程在主窗口的m_hWnd上绘画,是可以的(共有四个线程 每个线程画一种不同的线),后来想用双缓存,但是使用后就有问题了,我是这么做的,先按原来的逻辑把m_hWnd替换为新建的Bitmap 然后把Bitmap上的数据画到m_hWnd上,但是出现了一个问题,原来四个线程画完都会画出线来,现在 窗口上有时有四种线 有时有两种 有时有一种 有时有三种 都是随机出现 不知道是哪里有问题 还请各位高手看看,代码如下:
主窗口中代码:
CRect rect;
GetClientRect(&rect);
ShowMap::stScreenWidth = rect.Width(); //屏幕宽度
ShowMap::stScreenHeight = rect.Height() ; //屏幕高度
int i;
if(ShowMap::stBitMap == NULL)
{
ShowMap::stBitMap = new Bitmap(rect.Width(),rect.Height());
}
.......
线程调用的方法:
int ShowMap::DrawLine(int icount)
{
Graphics graphics(ShowMap::stBitMap);
Pen newPen(Color(ShowMap::stRed,ShowMap::stGreen,ShowMap::stBlue),ShowMap::stLineWidth);
Pen newPen2(Color(ShowMap::stBlue,ShowMap::stGreen,ShowMap::stRed),ShowMap::stLineWidth);
graphics.DrawLine(......);
}
下面是显示函数
void ShowMap::ShowAll()
{
Graphics graphics(* ShowMap::stHWnd);
graphics.DrawImage(ShowMap::stBitMap,0,0,0,0,ShowMap::stScreenWidth,ShowMap::stScreenHeight,UnitPixel);
}
...全文
284 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuba110 2012-08-03
  • 打赏
  • 举报
回复
楼主建议不要一次四个线程一起调试,你先关两个 试两个进程 看看什么原因吧,我认为这个应该和bitmap句柄 有关,我也不是很清楚 Bitmap够柄是否支持多个线程同时写入数据。
kuba110 2012-08-03
  • 打赏
  • 举报
回复
楼主建议不要一次四个线程一起调试,你先关两个 试两个进程 看看什么原因吧,我认为这个应该和bitmap句柄 有关,我也不是很清楚 Bitmap够柄是否支持多个线程同时写入数据。
blabla10101 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

条件变量吧!!!!!!!!!!!!!
[/Quote]
什么意思? 可以详细说下吗?
mirro 2012-08-02
  • 打赏
  • 举报
回复
条件变量吧!!!!!!!!!!!!!
blabla10101 2012-08-02
  • 打赏
  • 举报
回复
不会吧, 我现在使用了临界了
EnterCriticalSection(&ShowMap::g_cs);
Graphics graphics(ShowMap::stBitMap);
Pen newPen2(Color(ShowMap::stBlue,ShowMap::stGreen,ShowMap::stRed),ShowMap::stLineWidth);
int k = 1;
k = graphics.DrawLine(......);
LeaveCriticalSection(&ShowMap::g_cs);

第一个 每个线程都使用了这个临界 但问题仍旧。
第二个 k始终都为0.
还请各位 再帮看看怎么回事
傻X 2012-08-02
  • 打赏
  • 举报
回复
确实要互斥的。不然对同一资源的操作可能会失败,另外你graphics.DrawLine返回值是空的,所以你都判断不了是不是成功,悲剧。
blabla10101 2012-08-02
  • 打赏
  • 举报
回复
难道不能对同一个变量绘画? 之前对同一个handle绘画都是没有问题的啊,现在的问题只是这个handle换成了Bitmap
lijianli9 2012-08-02
  • 打赏
  • 举报
回复
线程直接要做互斥保护。
blabla10101 2012-08-02
  • 打赏
  • 举报
回复
哪们高手 给说下原因啥

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧