如何在linux中增加QT Gui线程优先级

时间:2014-07-16 06:03:12

标签: linux qt qthread

有没有办法在我的应用程序的Linux中设置gui线程优先级高于其他线程? 我也知道QThread类中的setPriority函数,不适用于linux。 但是,有没有解决方案呢? (我正在使用qt4.8) 非常感谢

2 个答案:

答案 0 :(得分:0)

在GUI线程中(例如在main()中)执行:

QThread::currentThread()->setPriority(QThread::HighPriority);

有关更多可能的优先级值,请参阅Qt文档。

答案 1 :(得分:0)

你不应该这样做。您的GUI应该只显示最新的图像。很可能您的设计强制GUI显示过时的图像,即使它们不再相关。

在Qt中实现的典型方法是让图像查看器类只显示最近设置的图像:

class ImageViewer : public QWidget {
    Q_OBJECT
    QImage m_img;
    bool m_new;
    void paintEvent(QPaintEvent *) {
        QPainter p(this);
        p.drawImage(0, 0, m_img);
        m_new = false;
    }
public:
    ImageViewer(QWidget * parent = 0) : QWidget(parent), m_new(false) {
        setAttribute(Qt::WA_OpaquePaintEvent);
    }
    Q_SLOT void setImage(const QImage & img) {
        if (m_new) qDebug() << "Viewer dropped frame!";
        m_img = img;
        m_new = true;
        if (m_img.size() != size()) setFixedSize(m_img.size());
        update();
    }
};

然后,您可以发送连接到setImage广告位的信号。这些信号可以来自已被移动到另一个线程的QObject

请参阅here for a complete example