MFC /第三方多线程挂起

时间:2012-02-23 17:57:57

标签: multithreading mfc

我目前正在使用MFC编写程序。使用MFC完成操作后,当前第三方函数启动一个线程(即选中一个复选框,启动我认为的MFC线程)。

当我选中复选框时会出现问题,此时整个程序都会挂起。我读了一些有关CProgramming和msdn的有趣讨论,似乎问题出现是因为新的第三方线程在MFC更新控件时调用WaitToSomething()。

有趣的事情要注意:

  • 当我调试程序时,程序在我选中复选框并且新线程正在尝试启动后挂起(又称重复调用WaitToRead())
  • 当我在没有调试器的情况下运行程序时,程序很好直到我切换到另一个窗口(即Internet浏览器,记事本等)

我的假设:

  • 检查以确保MFC在开始新线程之前已完成控件更新

如果有人有任何建议或解决方案,请发表评论。感谢。

编辑:

MFC在对象级别不是线程安全的(仅在类级别),因此当两个线程在同一个CButton对象上工作时会出现问题。

问:如何使其线程安全?

1 个答案:

答案 0 :(得分:0)

一位同事帮我弄明白了问题所在。

它挂起的原因是因为包含复选框的控件是一个子对话框,当它完成更新时,消息永远不会传递给它的父节点(所以当第三方线程调用WaitFor()时,MFC线程永远不会完成,因为父对话框认为其子节点仍在更新控件。)

<强>修正

对话框控件的“属性”下,将“控制”标志设置为 true (如果它有子级,请将“控制父级”标志设置为 true 以及。)

希望这有帮助。