我在 单文档工程 view.cpp 文件中建立了一个线程。
UINT MyThread(LPVOID Param)
{
     CMyProjView* pDlg = reinterpret_cast<CMyProjView*> <Param>;
     char *p = new char[1024];
     ...........
      p指向内存中被填充数据
     ...........
      pDlg->Func(p); }
CMyProjView::Func(char * p)
{
   CString temp;
   temp.Format("%s",p);
   .........
}线程一运行,就出现错误 ,调试看到传递Func参数的那一步有错误。如何解决?

解决方案 »

  1.   

    friend UINT WINAPI MyThread(LPVOID Param)?
      

  2.   

    CMyProjView* pDlg = reinterpret_cast<CMyProjView*> <Param>;如果CMyProjView是一个窗体类的话,就有可能出错,因为窗体不能跨线程使用
      

  3.   

    WindYou(WindYou)说:如果CMyProjView是一个窗体类的话,就有可能出错,因为窗体不能跨线程使用我觉得该使用友元函数或者全局变量吧。说错请指正哈
      

  4.   

    lz名字和我一样,哈哈MFC类不是线程安全的,所以建议不要跨线程使用
    另外你启动线程用的是哪个函数?
      

  5.   

    reinterpret_cast<CMyProjView*>这样是创建线程吗?不用CreateThread吗?不懂????????
      

  6.   

    不是指类的访问权限的问题,一个在线程A(大多数是主线程)中创建的的窗体W,线程B对W的某些操作会失败,所以通常我们不会直接在线程B中直接操作窗体W,而是发送一个自定义消息给W,线程A收到这个消息后再完成具体操作
      

  7.   

    还是用消息合适 .
      其他同志也谈了一些mfc Thread 和 窗体的基本知识.
      谢谢 大家的讨论