QT多线程创建的误区:run函数

本文通过代码示例揭示了在QT中多线程创建的一个常见误区,即`run`函数内虽然运行在新线程,但其调用的成员函数可能仍由主线程执行。强调了`OnTempTimer()`函数在这种情况下是在主线程上下文中运行,导致多线程使用无效。作者提示读者关注后续博客,了解正确的多线程创建和使用方法,并提供了`QThread::currentThreadId()`作为验证线程ID的方法。
摘要由CSDN通过智能技术生成

直接上代码吧,注意这种方法创建的多线程,只有run函数内的属于新的线程,OnTempTimer()虽然是run函数调用的,但是是主线程在执行,一定要注意啊。这样弄相当于没有任何意义,还是主线程在处理函数。
下一个博客有讲怎么实现多线程的正确创建和使用

MainWindow.cpp

MysqlThread = new ReconnectMysql();
    MysqlThread->start();

reconnectmysql.cpp

#include "reconnectmysql.h"

ReconnectMysql::ReconnectMysql()
{

}

void ReconnectMysql::run()
{
    qDebug()<< "run()";

    //Timer = new QTimer(this);这样写会报错:
    //Parent is ReconnectMysql(0xd621978), parent's thread is QThread(0x4ac5dd0),
    //current thread is ReconnectMysql(0xd621978)

    Timer = new QTimer();//或者Timer = new QTimer(NULL);
    //这句话也要在run()不能像这样给定时器指定父对象 Timer = new QTimer(this);
    Timer->start(1000);
    connect(Timer, SIGNAL(timeout()), this, SLOT(OnTempTimer()));
    this->exec();//不加这句话定时器不执行
}

void ReconnectMysql::OnTempTimer()
{
    qDebug()<< &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值