You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt多线程场景下信号槽未触发问题及替代方案咨询

问题:Qt多线程下信号槽未触发的优化方案咨询

我正在开发基于Qt信号槽的类RPC程序,客户端调用服务端后需要将函数结果打印到QTableWidget,因此在处理函数中使用emit发送信号,但槽函数始终未执行,怀疑是多线程环境导致的问题。

场景对比

  • 单线程模式:主线程创建multipleService、连接信号槽并启动服务,emit信号可正常触发槽函数。
  • 多线程模式:创建serviceThread并将其移至新线程,在createService方法中初始化服务,emit代码虽执行,但槽函数完全未触发,尝试使用Qt::QueuedConnection也无效。

临时解决方案与疑问

后续发现问题根源在于多线程中的while(true)死循环,加入QCoreApplication::processEvents()后可临时解决,但想咨询是否有更优的替代方案。


核心代码片段

service.cpp

#include "service.h"
multipleService* multipleService::getInstance = nullptr;
int add(int a, int b) {
    return a + b;
}
multipleService::multipleService() {
    getInstance = this; // 供静态方法发信号
    bool ok = connect(this, &multipleService::internalMessageOutput, this, &multipleService::messageOutputFunc, Qt::AutoConnection);
}
void multipleService::AddService(ServiceType::Request& request, ServiceType::Response& response) {
// 处理逻辑...获取response
emit getInstance->internalMessageOutput(QString(response));
}
void multipleService::messageOutputFunc(QString msg) {
    emit getInstance->messageOutput(msg);
}

service.h

#pragma once
#include <stdio.h>
#include <string.h>
class multipleService :public QObject {
    Q_OBJECT
public:
    multipleService();
    ~multipleService();
    static void AddService(ServiceType::Request& request, ServiceType::Response& response);
    void messageOutputFunc(QString);
private:
    static multipleService* getInstance;
signals:
    void messageOutput(QString);
    void internalMessageOutput(QString);
};

多线程serviceThread.cpp

void serviceThread::createService(const char* nodeName, const char* service_name, int historyDepth) {
   multipleService* s = new multipleService();
   connect(s, &multipleService::messageOutput, this, &serviceThread::outputMessage);
auto service = node.create_service<ServiceType>(service_name, multipleService::AddService, qos);
if (service) service->start();
else return;
    while (true)
    {
        if (QThread::currentThread()->isInterruptionRequested()) break;
    }
}

内容的提问来源于stack exchange,提问作者S qh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:55:08