qt6 thread tip1

新的线程必须要使用信号槽机制才能启动。假如一个对象a live在thread b上。那么start thread b后直接调用a里面的函数不能使a运行在b上。正确的做做法是先start thread b。然后用信号槽机制调用a,a就可以运行在thread b上了。如果直接调用a还是会在main thread 上运行。

  	QThread::currentThread()->setObjectName("main thread");
    qInfo()<<"Starting"<<QThread::currentThread();

  	QThread worker;
    worker.setObjectName("Worker Thread");

    Test test;
    test.moveToThread(&worker);
    worker.start();

    test.run();

运行结果:
Starting QThread(0x2995b1464c0, name = “main thread”)
Running QThread(0x2995b1464c0, name = “main thread”)
Finished QThread(0x2995b1464c0, name = “main thread”)
Finished QThread(0x2995b1464c0, name = “main thread”)
仍然在main thread 上运行.
采用信号槽机制启动test.run

	QThread::currentThread()->setObjectName("main thread");
    qInfo()<<"Starting"<<QThread::currentThread();

	QThread worker;
    worker.setObjectName("Worker Thread");

    Test test;
    test.moveToThread(&worker);
    QTimer timer1;
    worker.start();

    timer1.singleShot(10,&test,&Test::run);
    QObject::connect(&worker,&QThread::started,&test,&Test::run);

运行结果:
Starting QThread(0x191017364c0, name = “main thread”)
Finished QThread(0x191017364c0, name = “main thread”)
Running QThread(0x3a155ffaa0, name = “Worker Thread”)
Finished QThread(0x3a155ffaa0, name = “Worker Thread”)
Timeout QThread(0x3a155ffaa0, name = “Worker Thread”)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值