如何从工作线程访问MFC控件?

时间:2011-08-25 12:10:49

标签: c++ multithreading mfc

从工作线程访问MFC控件的最佳方法是什么?

访问控件的MFC惯用方法是什么?

我在这里阅读http://www.flounder.com/workerthreads.htm以下方法,但我不太喜欢new的{​​{1}},我怎样才能确保CString正确CString { {1}}?

deleted

3 个答案:

答案 0 :(得分:0)

使用PostMessage(..)是正确的。考虑使用SendMessage(..) - 直到完成为止。 将指针传递给新对象很常见 - 检查PostMessage(..)的返回值以检查它是否已发布。

  

如何确保CString被正确删除?

如上所述,检查PostMessage(..)的返回值,并在退出消息循环时处理整个消息队列。

答案 1 :(得分:0)

作为一般规则,只能从创建它们的线程访问MFC控件。这就是您找到的样本经过传递消息的额外步骤的原因。消息由创建控件的线程接收和处理。

在OnUpdateResults()中正确删除了CString。

答案 2 :(得分:0)

除了@ Simon的答案之外,如果你有一个更复杂的场景,更难以确定谁应该删除CString(或任何类型),请考虑std :: tr1 :: shared_ptr。它将负责删除。