我的应用正在等待线程完成。当线程完成它的事情时,我想更新 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/