找回密码
 立即注册
收起左侧

线程问题

3
回复
6084
查看
[复制链接]
累计签到:103 天
连续签到:1 天
来源: 2016-6-13 09:17:39 显示全部楼层 |阅读模式
3Qter豆
我想做一个线程在后台一直运行,等待接受服务器下发的指令,接收到指令后,更新相应的参数值,不要阻塞主线程,我要怎么做呢?现在我就是新建的一个线程类,我想在程序启动了就后台运行这个等待线程,我在主程序的构造函数中实例化了这个线程,并启动   
    mqttThread = new MqttThread;
    mqttThread->start();
但是他阻塞了主程序,我要怎么设置呢,能让他在后台运行?是优先级的问题么?还是其他问题呢?感谢大家指点一下哈


最佳答案

查看完整内容

参考assistant写就好了 class Worker : public QObject { Q_OBJECT QThread workerThread; public slots: void doWork(const QString ¶meter) { // ... emit resultReady(result); } signals: void resultReady(const QString &result); }; class Controller : public QObject { Q_OBJECT QThread workerThread; public: Controller() { Worke ...
回复

使用道具 举报

累计签到:595 天
连续签到:1 天
2016-6-13 09:17:40 显示全部楼层
参考assistant写就好了

class Worker : public QObject
{
     Q_OBJECT
     QThread workerThread;

public slots:
     void doWork(const QString &parameter) {
         // ...
         emit resultReady(result);
     }

signals:
     void resultReady(const QString &result);
};

class Controller : public QObject
{
     Q_OBJECT
     QThread workerThread;
public:
     Controller() {
         Worker *worker = new Worker;
         worker->moveToThread(&workerThread);
         connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
         connect(this, SIGNAL(operate(QString)), worker, SLOT(doWork(QString)));
         connect(worker, SIGNAL(resultReady(QString)), this, SLOT(handleResults(QString)));
         workerThread.start();
     }
     ~Controller() {
         workerThread.quit();
         workerThread.wait();
     }
public slots:
     void handleResults(const QString &);
signals:
     void operate(const QString &);
};
回复

使用道具 举报

尚未签到

2016-6-14 01:46:47 显示全部楼层
同上,官方文档也是这么推荐用moveToThread的,不推荐继承QThread
回复

使用道具 举报

累计签到:103 天
连续签到:1 天
2016-6-14 08:32:23 显示全部楼层
在这里非常感谢sywh和Jony_chan两位朋友的指导,我明白啦,谢谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了