我正在寻找正确的模式,以便在基于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);
}
在main函数中也存在注册:
qRegisterMetaType<Message> ("Message");
问题是为什么从不调用插槽? 如果删除线程的东西(moveTOThread)然后一切正常, 但我更喜欢在不同线程的事件循环中进行处理