【问题标题】:Multithreading issues with wxWidgets applicationwxWidgets 应用程序的多线程问题
【发布时间】:2022-01-02 01:28:48
【问题描述】:

我们使用 wxWidgets 开发了一个应用程序。我们现在正在使用 Vulkan 合并图形。

使用线程时,有时需要“休眠”主线程以等待工作线程停止。此方法在不使用 wxWidgets 时有效。但是,当使用 wxWidgets 时,任何 sleep 函数调用都会导致所有线程进入休眠状态。

我们可以通过适当地调用 wx 函数“Yield”来解决这个问题,但这会由于某种原因导致图形中的“剪切”。

还有其他方法可以让主线程等待工作线程完成吗?这一切都是在一个高速关键进程中完成的,因此更喜欢一个有效的解决方案,将 wx 与线程作业“解耦”。

非常感谢

【问题讨论】:

    标签: c++ multithreading wxwidgets


    【解决方案1】:

    您永远不应该使用“睡眠”来等待线程完成。如果您使用std::thread(或使用wxThread::Wait(),但现在您应该在代码中使用标准类),通常的解决方案是只使用join() 它们。这样做的问题是这会阻塞主线程,使您的应用程序看起来挂起。如果这是一个问题——即你不只在应用程序关闭时这样做,当没有更多窗口时,所以主线程不再分派消息不是问题——一个简单的解决方案是只是继续检查线程是否已经/已经定期完成。

    【讨论】:

    • 最后一个解决方案正是我们正在做的——在检查线程是否完成时定期“休眠”。我们不想使用“join”,因为在这种情况下每次都必须重新创建线程。另外,为什么我被否决了?人们在没有任何评论/批评的情况下对真正的问题投反对票是怎么回事?
    • 我不知道你为什么被否决,但你的问题是等待工作线程停止,现在你说你实际上并不希望他们停止,这肯定令人困惑.如果您正在寻找一种通用的线程间通信方式,而不仅仅是等待线程停止,请参阅CallAfter() 并更一般地将事件发布到主线程。
    • 感谢您的帮助
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多