我开了一个工人线程,传入CView类的指针在线程里调用UpdateAllViews(NULL);结果在调试时这个函数处报错是不是不能用啊,为什么?

解决方案 »

  1.   

    好像这个 CFile outFile(lpFileName,CFile::modeCreate|CFile::modeWrite);也报错,真不知道为什么
    对线程才刚入门
      

  2.   

    我开了一个工人线程,传入CView类的指针
    ------------------------
            错误! 窗体对象指针不能传入线程. 但可以将 HWND传入,并在该句柄上调用Invaludete 等API函数.CFile outFile(lpFileName,CFile::modeCreate|CFile::modeWrite);----------------------------
    这个本身没错,不过如果这样的话, 如果打开文件失败,则会抛出异常.你要处理这个异常.
      

  3.   

    另外如果CView派生类对象里还有其它对象指针怎么办,就不能传句柄了?
      

  4.   

    我开了一个工人线程,传入CView类的指针
    ------------------------
            错误! 窗体对象指针不能传入线程. 但可以将 HWND传入,并在该句柄上调用Invaludete 等API函数.-------------------------
    传入床体对象的指针应该是可以的吧?
    可以把Form 类的指针传进去,然后得到CView的操作,前提是你要包含Form的定义,申请一个Form类的指针变量,在建立工作线程的时候传进去,或者直接的就把CView的对象指针传进去,但建议不要这样做,传Handle安全点
      

  5.   

    MFC对象是不能作为传入线程的参数的。
      

  6.   

    将 View 的 HWND  (m_hWnd成员)传入线程,  线程对视图的操作可以通过自定义的窗口消息来进行.
      

  7.   

    比如CMyView继承CView,在其中加了一个指向其它对象的指针如果向线程中传入?CMyView的句柄,我在线程内如何获得那个指针呢?
      

  8.   

    DWORD ThreadFunc(LPVOID lparam)
    {
       CYourClass *ls = (CYourClass *)lparam;
      //...
    }