本帖最后由 sknice 于 2014-09-02 10:56:45 编辑

解决方案 »

  1.   

    谢谢回复,讲的很明白,我的问题是现在有很多费时操作 ,如果都放在子线程里,改动有点大 , 有没有一种可能让子线程直接更新进度条进度, 记得以前写C# 程序的时候,设置设置了忽略线程安全,就可以让子线程直接操作界面控件, 不知道C++ 中是否可以??
    MFC中是不可以的,至少我没用过也不知道怎么忽略线程安全,MFC界面的更新应该全靠消息
      

  2.   

    谢谢回复,讲的很明白,我的问题是现在有很多费时操作 ,如果都放在子线程里,改动有点大 , 有没有一种可能让子线程直接更新进度条进度, 记得以前写C# 程序的时候,设置设置了忽略线程安全,就可以让子线程直接操作界面控件, 不知道C++ 中是否可以??子线程控制主线程创建的进度条不可能,因为进度条的所有消息都由系统发送给主线程。所以如果希望子线程去控制进度条那么可以在子线程中创建这个进度条然后子线程中加入消息循环处理消息。为了避免和主线程窗口冲突,这个进度条可以创建到子线程建立的top window中然后覆盖到主窗口相应位置。这个子线程建立的top window还必须做一件事--定时查询主窗口位置然后跟随它移动(只能主动查询,不能跟踪主窗口消息,因为你可以认为主窗口已经陷入死循环不会响应任何消息--事实上操作系统也是这么认为的并且会生成一个ghost窗口替换你的主窗口以响应用户移动窗口之类的操作)。 综合起来考虑,最好还是将你的耗时操作放入子线程而主线程只负责更新/响应界面,否则即使可以用子线程更新部分界面,给用户的体验仍然非常糟糕,比如主窗口标题栏中会出现“未响应”等文字。