簡體   English   中英

qt通過將對象移動到線程來跨線程發出信號

[英]qt emitting a signal across threads by moving the object to

我正在尋找正確的模式以在基於Qt的應用中將其用於異步處理。

這是一個簡化的類,應該接收信號

class Receiver : public QObject {
    Q_OBJECT
public:
    explicit Receiver(QObject *parent = nullptr) : QObject(parent) {    }
public slots:
    void onNewMessage(Message message) {

    // ...
    }
};

創建此類的實例是動態的(實際上也很簡單-用於消息處理的對象數組)。

    Receiver* r;
    // ...
    if (r == nullptr) {
        r = new Receiver{};
        r->moveToThread(new QThread);
        connect(this, &MessageGenerator::messageCompleted, r, &Receiver::onNewMessage);
    }

在主要功能中還存在一個注冊:

    qRegisterMetaType<Message> ("Message");

問題是為什么從未調用過插槽? 在刪除線程的東西(moveTOThread)的情況下,一切正常,但我更喜歡在不同線程的事件循環中進行處理

根據文檔

構造一個新的QThread來管理一個新線程。 父級擁有QThread的所有權。 在調用start()之前,線程不會開始執行。

您是否這樣調用方法start

r = new Receiver{};
t = new QThread();
r->moveToThread(t);
connect(this, &MessageGenerator::messageCompleted, r, &Receiver::onNewMessage);
t->start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM