因为从线程要从CXXDlg类中取一些变量,我又不想用静态变量,不知从线程能不能直接从CXXDlg类对象中获得这些变量.我已经用参数将其句柄送入线程.
即将CreateThread()第三个参数设为CXXDlg类对象的成员m_hWnd,而在线程中用FromHandle重新构建CXXDlg类对象的指针,并取得了对象的成员变量,可是成员变量的值并不能与实际窗口的同步.不知是何原因,有何解决方法.
请高手帮忙!

解决方案 »

  1.   

    把this作为一个变量传入线程的函数,然后通过this可引用PUBLIC的成员变量。
      

  2.   

    我试过,但是用this引用PUBLIC型的成员变量也会出现共享冲突,这又违背了线程规则
      

  3.   

    这样回导致ACESS错误,能说明原因吗?
      

  4.   

    什么时候出错?
    如果窗口结束时线程没结束就会出错的,所以要有一个全局变量来标志传进去的CWnd指针是否已经被析构
      

  5.   

    Don't expect to be able to access any MFC objects not created within your thread. Each thread gets its own handle map within MFC, which means, for instance, that a handle to a CWnd passed to a thread method may be invalid inside the thread. Instead, pass handles to threads as their native HANDLE type, and then use the FromHandle or Attach methods to obtain a handle to an MFC object.you can also try 
    CXXXDlg* pDlg=(CXXXDlg*)AfxGetMainWnd();//if your programe is dialog based.
      

  6.   

    应该不会吧,我都是这样做的。如果用AfxBeginThread()
    格式如下:(在窗口类的某函数中)
    AfxBeginThread(MyThread,this);
      

  7.   

    我用的不是 AfxBeginThread;是CreateThread,采用API线程,而他无法访问
    pDlg->m_Data.
      

  8.   


    struct THREADINFO
    {
    LOGFONT Font;
    unsigned char FileName[_MAX_FNAME];
    CWaitMakedDlg* pWaitDlg;
    };
    THREADINFO* pT = (THREADINFO*)HeapAlloc(
    GetProcessHeap(),
    HEAP_ZERO_MEMORY,
    sizeof(THREADINFO));
    strcpy((char*)pT->FileName, Name);
    memcpy(&(pT->Font), &font, sizeof(LOGFONT));
    pT->pWaitDlg = pWaitDlg; m_pThread = AfxBeginThread(
    CommProc,
    (LPVOID)pT,
    THREAD_PRIORITY_NORMAL,
    0,
    CREATE_SUSPENDED,
    NULL);先创建一个数据结构,保存你要传递的东西,
    用HeapAlloc开一片空间,把指针作为参数传到线程中
    OK?
      

  9.   

    在c/c++程序中使用CreateThread() 启动线程会有问题,详见
    《win核心编程》
    注意C r e a t e T h r e a d函数是用来创建线程的Wi n d o w s函数。不过,如果你正在编写
    C / C + +代码,决不应该调用C r e a t e T h r e a d。相反,应该使用Visual C++运行期库函数
    _ b e g i n t h r e a d e x。如果不使用M i c r o s o f t的Visual C++编译器,你的编译器供应商有它自
    己的C r e a t e T h r e d替代函数。不管这个替代函数是什么,你都必须使用。本章后面将要
    介绍_ b e g i n t h r e a d e x能够做什么,它的重要性何在。
    ///////////////////////////////////////////////////////
    以上摘自《win核心编程》第6章第4页