【问题标题】:Efficient implementation of a threaded console window线程化控制台窗口的高效实现
【发布时间】:2011-01-31 15:18:33
【问题描述】:

我有一个 Win32 应用程序,它由两个组件组成:一个用作应用程序界面的主窗口和一个用作控制台的辅助无模式对话框。应用程序在某些(常规)操作期间会生成大量调试文本。

鉴于我的限制,在每次调试打印调用期间必须更新控制台的编辑控件是相当昂贵的。我的目的是创建一个由工作线程定期转储的关键部分同步消息队列。对于如何对这种实现进行编码的任何建议,我将不胜感激。

【问题讨论】:

  • CS-synchronized 是什么意思?
  • 关键部分 - 同步。我将编辑问题以澄清。
  • 这个问题太笼统了,尽量具体一点。您不清楚哪个特定部分?
  • 好吧,没什么特别的。我当前的设置,也就是我在上面描述的意图,似乎在向编辑控件发送消息时造成了死锁。因此,我希望从其他开发人员那里了解如何安全地实现这一目标。
  • 如何向编辑控件发送消息?

标签: c++ multithreading winapi console thread-safety


【解决方案1】:

在工作线程中,锁定 CS 并添加到共享数据结构中。在 GUI 线程中,设置 timer 并在 WM_TIMER 消息处理程序中,锁定 CS,从共享数据结构中删除,并附加到编辑控件。

【讨论】:

  • 您的帖子提示我尝试使用计时器,它成功了!非常感谢。
【解决方案2】:

尝试在编辑控件窗口上休眠消息泵,而不是运行新线程。

【讨论】:

    【解决方案3】:

    只需处理这个与多线程和 GUI 相关的反复出现的问题:

    永远不要从另一个线程访问 Gui 元素,你必须向窗口发布消息,所以当在 GUI 中更改某些内容时,代码将在主线程中执行。

    【讨论】:

      【解决方案4】:

      我尝试在主线程中使用计时器,它对我来说效果很好。我感谢海报!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 2012-07-27
        • 2019-01-18
        • 2014-06-24
        • 1970-01-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多