我目前正在使用MFC编写程序。使用MFC完成操作后,当前第三方函数启动一个线程(即选中一个复选框,启动我认为的MFC线程)。
当我选中复选框时会出现问题,此时整个程序都会挂起。我读了一些有关CProgramming和msdn的有趣讨论,似乎问题出现是因为新的第三方线程在MFC更新控件时调用WaitToSomething()。
有趣的事情要注意:
我的假设:
如果有人有任何建议或解决方案,请发表评论。感谢。
编辑:
MFC在对象级别不是线程安全的(仅在类级别),因此当两个线程在同一个CButton对象上工作时会出现问题。
问:如何使其线程安全?
答案 0 :(得分:0)
一位同事帮我弄明白了问题所在。
它挂起的原因是因为包含复选框的控件是一个子对话框,当它完成更新时,消息永远不会传递给它的父节点(所以当第三方线程调用WaitFor()时,MFC线程永远不会完成,因为父对话框认为其子节点仍在更新控件。)
<强>修正强>:
在子对话框控件的“属性”下,将“控制”标志设置为 true (如果它有子级,请将“控制父级”标志设置为 true 以及。)
希望这有帮助。