使用AfxBeginThread建立工作线程,线程参数封装了三个指向结构的指针。其中一个指针指向封装了一个进度对话框的结构,形式为param->progress。在progress中存在一个对话框的指针,对话框中有一个CProgressCtrl控件。在线程中使用progress->SetPos()来更新进度条控制时发生死锁。内部表现为SendMessage函数无法返回。不知道为什么。100大分奉上,不成敬意:)

解决方案 »

  1.   

    CProgressCtrl* cwnd = (CProgressCtrl*)(param->progress);
    cwnd->SetPos();
      

  2.   

    这还不简单?肯定死锁了.因为SetPos也是SendMessage.两个都在等待返回,肯定就死掉了.尽量不要在线程中直接调用指针,
      

  3.   

    这样解决:工作线程调用方法,这个方法用PostMessage给自己发消息。这样线程的调用结束就返回了。窗口线程自己处理消息。呵呵,我就这么解决的。
      

  4.   

    你的主线程是不是在等待你的工作线程的结束?
    如果是的话,它处于BLOCK.然后你的工作线程企图让他重画窗口,而且使用SENDMESSAGE,当然就死了
      

  5.   

    结帐,给分
    shesh(无所谓)与 tony1978(突击召唤师)的回答揭示出了问题产生的原因但是我面临的情况比较特殊,不能采用PostMessage的方法解决问题
    打算从CWinThread派生类来实现谢谢各位