使用AfxBeginThread创建CWinThread继承类。我想这样时安全的,直接使用_begindthread或CreateThread在MFC中是线程不安全的,特别是处理窗口相关的功能。

解决方案 »

  1.   

    你这样做当然会报错,MFC一般不支持多线程,所以象CWnd CSocket等都不能在
    线程之间传递.怎样解决呢?
    1 你传的CCopyfDlg *pt应该是没错的,不过我还是建议你传递HWND窗口句柄
    2 利用PostMessage(...)向主窗口发送自定义消息.
    3 在主窗口处理自定义消息,调用UpdateData(FALSE);
      

  2.   

    试试
        CCopyfDlg *pt=CWnd::FromHandle(((CCopyfDlg*)pParam)->m_hWnd);   \\pParam 为指向一个对话框类
        pt->UpdateData(FALSE);      \\此句有问题,不知为什么?
      

  3.   

    试试
        CCopyfDlg *pt=CWnd::FromHandle(((CCopyfDlg*)pParam)->m_hWnd);   \\pParam 为指向一个对话框类
        pt->UpdateData(FALSE);      \\此句有问题,不知为什么?
      

  4.   

    首先主线程向子线程传递对象不安全,最好传句柄,另外子线程最好发送消息,然后由主线程来处理。
      如果UpdateData出现ASSERT,有可能是你在执行这条语句以前,主线程还没有调用DoModal引起的。
      

  5.   

    pt->UpdateData(FALSE);时主线程会阻塞,而主线程是界面线程,Update必须由它完成,这样就形成死锁.
    我觉得这些动作用PostMessage()比较好.
    呵呵,愚人愚见!
      

  6.   

    我看还是楼上他们说的对,传窗口句柄,然后PostMessage(),然后在你的主线程响应这个消息时调UpdateData(FALSE);为好。
    而且这样也显得更合理呀,UpdateData(FALSE);理应在主线程做的,没有必要放到你的线程里。
      

  7.   

    postmessage 可以很好的运行,但这线程中的调用为什么不行呢?
      

  8.   

    http://www.csdn.net/Expert/TopicView1.asp?id=732989
      

  9.   

    MFC CWnd derived object can not be used across thread boundaries.
    Send a user defined message and do UpdateData in the message handler function.