我将一些数值处理放在working thread中处理
UINT Behind(LPVOID pParam){
clussview* pview = (clussview*)pParam;
clussdoc* pDoc = pview->getdocument();
...
一些数值处理
...
pDoc->UpdateAllViews(NULL);
}
程序中在updateallviews中报了错!这个程序有两个view,这两个view,都是cformview派生的,采用了切分窗口分成两个视图,为了同步数据的变化,所以要使用这个函数进行刷新!
可是在调试中发现错误出在cdocument::updateallviews中的断言 ASSERT_VALID(pView)中,是不是不能在线程中使用这个函数还是啥原因?
同样的代码,如果放在这个clussview的函数中,程序运行正常!可见不是代码错误
有碰到过相似情况的请帮忙,谢谢!
UINT Behind(LPVOID pParam){
clussview* pview = (clussview*)pParam;
clussdoc* pDoc = pview->getdocument();
...
一些数值处理
...
pDoc->UpdateAllViews(NULL);
}
程序中在updateallviews中报了错!这个程序有两个view,这两个view,都是cformview派生的,采用了切分窗口分成两个视图,为了同步数据的变化,所以要使用这个函数进行刷新!
可是在调试中发现错误出在cdocument::updateallviews中的断言 ASSERT_VALID(pView)中,是不是不能在线程中使用这个函数还是啥原因?
同样的代码,如果放在这个clussview的函数中,程序运行正常!可见不是代码错误
有碰到过相似情况的请帮忙,谢谢!
void clussview :: OnButton(){
...
AfxBeginThread(Behind,this,THREAD_PRIORITY_NORMAL);
}
可是如何在clussview中的某一个函数中得到这个view的首地址呢??doc中有这个地址吗?
...
AfxBeginThread(Behind,this,THREAD_PRIORITY_NORMAL);
}
没传错。看来是线程的问题。你可以用别的办法,比如向pview发送一个自定义消息,然后需要的操作在clussview类定义的函数中进行。