QThread中的一些理解

在子类化线程中,因为线程的依赖性会导致所有除run中运行的函数都会在主线程中运行,如果我们想让这个子类中的所有函数都在子类中运行的话就要改变它的依赖性

class QPlayOnWallThread : public QThread
{
    Q_OBJECT
public:
    QPlayOnWallThread();
    ~QPlayOnWallThread();
    void initValue();                //初始化数据
    void initWallThread();       //初始化:读配置、读记录
    bool wirteRecord();         //缓存记录
Q_SIGNALS:
    void sendWallInfo(QWallInfo info);
    void sendStart();
public Q_SLOTS:
    void test_slot();
    void PlatPreviewOnTvwall_slot(const char * szCameraIndexCode, int iTvWallId, int iWndId); //上墙
protected:
    virtual void run();         //根据记录上墙
private:
//    bool readRecord();          //读缓存记录
    bool readConfig();          //读配置文件
private:
    bool errorFlag;
    QWallInfo m_info;
};

 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
   test = new QPlayOnWallThread;
    test->moveToThread(test);//修改依赖性
    test->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    test->PlatPreviewOnTvwall_slot("cc",1,1);
}

修改依赖性后就可以使得我们创建的子类中的函数都在子线程中运行。

但是void MainWindow::on_pushButton_clicked()这个函数运行以后你会发现PlatPreviewOnTvwall_slot("cc",1,1)是在主线程中运行的,为什么呢?因为调用PlatPreviewOnTvwall_slot("cc",1,1);这句话是主线程中调用的所以运行也是主线程中运行。

我总结了一点:对于线程类来说想让其在子线程中运行,那么就不要在主程序中调用子线程类中的函数。(前提是修改了它的依赖对象,否则除了run中运行的函数都是在主线程中运行)

不修改依赖性的结果:

修改依赖性的结果:

C++交流群:585225803

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值