qt - XCB中如何唤醒GUI线程?

标签 qt gtk x11 xlib xcb

我的应用正在等待线程完成。当线程完成它的事情时,我想更新 GUI。 GUI 线程在 xcb_wait_for_event() 中被阻塞。

XCB 可以吗? Qt、GTK、FLTK 等如何根据 XCB API 实现这个基本的 GUI 问题?

最佳答案

在 Qt 中,您应该将线程发出的(排队的)信号连接到 GUI 线程对象上的插槽。插槽调用然后由事件循环处理,就像来自例如的自发事件一样。用户输入。

来自 Maya Posch's excellent article on using QThread :

class Worker : public QObject {
    Q_OBJECT

public:
    Worker();
    ~Worker();

public slots:
    void process();

signals:
    void finished();
    void error(QString err);

private:
    // add your variables here
};

void Worker::process() {
    // allocate resources using new here
    qDebug("Hello World!");
    emit finished();
}

在 GUI 线程中:

QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(thread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();

您感兴趣的线路是

connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));

现在去阅读 How To Really, Truly Use QThreads; The Full Explanation .

关于qt - XCB中如何唤醒GUI线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323337/

相关文章:

Qt Creator 使用 cmake 自动完成

c++ - 具有单个值 : Select this value 的 QComboBox

c - 如何控制 GtkWidget 中前导空格的数量?

在 XCB 中将鼠标光标更改为标准手形光标

c++ - 如何使用 Xlib 模拟拖动 Action ?

c++ - 调试断言失败 : _CrtIsValidHeapPointer(pUserData)

python - 无法对字体进行抗锯齿

macos - 在Mac上安装ige-mac-integration时出错

python - gtk:在 CellRendererCombo 'changed' 信号上修改 TreeView 模型时遇到问题

c - 如果窗口内容更改,则自动截取 x 服务器的屏幕截图