【问题标题】:QT UI jerks while Animating in a multiThreaded application!在多线程应用程序中制作动画时 QT UI 出现抖动!
【发布时间】:2011-10-26 04:57:09
【问题描述】:

QT 应用程序中的多线程问题。

我有一个多线程应用程序,主 UI 线程和工作线程 线。我已经用 TimeCriticalPriority 和 具有正常优先级的工作线程。这样我的用户界面就不会冻结 在任何时间点。 但是当我尝试为一个屏幕制作动画以从一个屏幕切换到 其他屏幕我在 UI 上看到了抖动。

这里的问题是,当 UI 线程动画切换 屏幕,平台从 UI Thread 切换到 Worker 线程 导致抽搐。我该如何解决这个问题?

我想以下解决方案可能会帮助我解决这些问题 问题。但是我如何实施解决方案? 1. 让工作线程等待,直到UI线程中的动画完成。 - 我应该如何让工作线程等待? 2. 让 UI 线程忙到动画结束? - 我怎样才能让 UI 线程忙碌? (可能的解决方法 解决方案可能会在 UI Thread 中调用一些递归函数,所以它确实如此 不切换到工作线程)。

有没有其他方法可以从左到右切换屏幕或 在 QT 中不使用 QPropertyAnimation 反之亦然?

对此的任何建议/帮助都非常受欢迎。

谁能告诉我可能的解决方案?

提前致谢。

最好的问候 瓦伦·贾吉

【问题讨论】:

    标签: multithreading qt


    【解决方案1】:

    您可能希望降低工作线程的优先级,而不是提高 UI 线程的优先级(例如,降低到 LowPriority 或 LowestPriority)。这样,您的工作线程就不会从您的程序可能间接依赖的其他线程/进程(例如操作系统用于跟踪鼠标的线程或类似线程)中占用 CPU 周期。 (降低线程优先级也比提高优先级更好,因为某些操作系统会阻止非根进程/线程提高优先级)

    此外,您可能想查看是否有任何互斥锁被您的 UI 线程锁定,这些互斥锁也可能被工作线程锁定。如果有,这些可能会导致 priority inversion 导致您的 UI 线程被阻塞,直到工作线程释放互斥锁。

    【讨论】:

    • 非常感谢您的时间和提示。
    • 感谢您的时间和帮助。我正在使用 Windows CE 6.0 操作系统,很抱歉我没有在之前的帖子中指定这一点。根据您的建议,我将工作线程的优先级降低到 LowPriority,然后降低到最低优先级,但这并没有帮助。我仍然面临同样的问题。我正处于应用程序的设计阶段,目前我还没有使用 Mutex。
    • 如果我可以尝试任何其他解决方案,请告诉我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多