我用AfxBeginThread起一线程,线程函数里需要view类指针,但是会内存泄漏或是断言错误?
我是一个MDI,对话框里起一线程。在对话框类的主线程按下面获得view类指针,会有内存泄漏。在另起的线程里按下面获得view类指针,会有断言错误。
CMDIFrameWnd *pMain=(CMDIFrameWnd *)AfxGetApp()-> m_pMainWnd;//
CMDIChildWnd *pChild=(CMDIChildWnd *)pMain-> GetActiveFrame
CMyView *pView=(CMyView *)pChild-> GetActiveView();
请教大侠帮忙!
[解决办法]
可以这样处理:
自定义一个消息,比如WM_USER_DRAW,
当需要进行绘制操作时,就像view发送该消息,用PostMessage或者SendMessage都可以。如果需要传递数据,就用全局变量或者用SendMessage.
大致的伪代码如下:
hWnd ; // 这是创建线程时通过参数传递过来的CMyView的句柄
...
// 定义并初始化绘制操作所需的数据,theData
::SendMessage( hWnd, WM_USER_DRAW, (WPARAM)&theData, (LPARAM)NULL);
///////////////////////////////////////////////
在CMyView中添加消息相应函数,在该函数进行实际的绘制操作
LRESULT CMyView::OnUserDraw( WPARAM wParam, LPARAMlParam )
{
...
return 0L;
}
[解决办法]
断言失败的原因为在调试模式会有你说的问题在
发布版本模式就没有mfc类库不推荐这么做,因为在cpu场景切换时可能丢失数据
如果你想做 把出现断言错误的地方不执行CFrameWnd::AssertValid()即可
[解决办法]
哦
你在建立新线程的时候把要画的view指针传进线程
然后再线程里操作就可以了