读书人

OnPaint()为什么不能在线程中使用?解

发布时间: 2012-02-07 17:45:36 作者: rapoo

OnPaint()为什么不能在线程中使用?
线程函数
UINT Drinkwater1(LPVOID pParam)
{
while(c1==false)
{
if(m_top<=0)
break;
else
{
m_top--;
if(m_top<=0)
break;
(CWnd*)pParam->OnPaint();
Sleep(90);
}
}

return 0;
}
为什么不行呢?要怎样使用呢?我想在线程函数中调用OnPaint()函数来实现重复执行画相同的图。如此法不行,其他方法是什么?谢谢!

[解决办法]
任何和HWND有关的东西都不得跨线程使用,这是因为窗口也是共享资源,他不是线程安全的

[解决办法]
貌似不是不行,而是必须安全的使用它
[解决办法]
OnPaint()一般不直接调用,而是通过Invalidate()设定无效区域,WM_PAINT消息会进入消息队列,这样的方式。
[解决办法]
在多线程里面画图,invalidate的时候刷新。
带窗口的多线程也是有都,MFC里面把线程分为工作者线程和有界面线程。后者有窗口。
[解决办法]
简单的说,之所以要设定无效区域(无效区域当然可以不指定,默认是整个窗口),是因为程序不知道你什么时候要手动刷新。
难不成你都现成不退出就一直不刷新么?

读书人网 >C++

热点推荐