我将一些数值处理放在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的函数中,程序运行正常!可见不是代码错误 
有碰到过相似情况的请帮忙,谢谢!

解决方案 »

  1.   

    会不会pParam参数传递错误?只想到这个可能。线程是怎样启动的?
      

  2.   

    有道理,这个pParam传递的是在view中一个button响应函数中的this,怪不得看到传递过去的是某一部分的偏移量了,即
    void clussview :: OnButton(){
    ...
    AfxBeginThread(Behind,this,THREAD_PRIORITY_NORMAL);
    }
    可是如何在clussview中的某一个函数中得到这个view的首地址呢??doc中有这个地址吗?
      

  3.   

    void clussview :: OnButton(){
    ...
    AfxBeginThread(Behind,this,THREAD_PRIORITY_NORMAL);
    }
    没传错。看来是线程的问题。你可以用别的办法,比如向pview发送一个自定义消息,然后需要的操作在clussview类定义的函数中进行。