您的位置:首页 > 新闻 > 热点要闻 > 沈阳突发事件刚刚_2022年五一疫情能结束吗_正规淘宝代运营去哪里找_网站优化公司大家好

沈阳突发事件刚刚_2022年五一疫情能结束吗_正规淘宝代运营去哪里找_网站优化公司大家好

2025/1/7 23:42:33 来源:https://blog.csdn.net/huangguangzhi88/article/details/143430206  浏览:    关键词:沈阳突发事件刚刚_2022年五一疫情能结束吗_正规淘宝代运营去哪里找_网站优化公司大家好
沈阳突发事件刚刚_2022年五一疫情能结束吗_正规淘宝代运营去哪里找_网站优化公司大家好

 注意点:

信号槽的的默认连接方式为autoconnect的方式.

当信号的发射位置(也即emit写的位置)与槽函数的接收者在同一个线程中时,默认就是直连的连接模式, 当发送信号时,立即执行槽函数.

当信号的发射位置(也即emit写的位置)与槽函数的接收者在不同的线程中时,默认就是队列的连接模式, 当发送信号时,将把信号发送到接收者线程的事件队列中,等事件队列执行到该信号时再执行槽函数.

重点:不是信号发送者与槽函数的接收者所处线程来判断,而是信号发送的位置与接收者所处线程来判断.

  connect(m_pGenCode, &QThread::started, this, &qwaGrindProcessDS::slotStartGenCode);connect(m_pGenCode, &QThread::started,[this]() {qInfo() << "started lambda:" << QThread::currentThreadId(); });connect(m_pGenCode, &QThread::started,this,[this]() {qInfo() << "started lambda:" << QThread::currentThreadId(); });

 

m_pGenCode通过继承QThread的方式定义的QThread子类对象指针, 在主窗口中定义.通过重写run函数,来实现的多线程的方式.

所以m_pGenCode与this是在一个线程. 如果需要在不同的线程中,则需要采用movetothread的方式创建线程.2种方式各有优缺点.

1.

connect(m_pGenCode, &QThread::started, this, &qwaGrindProcessDS::slotStartGenCode);

QThread::started()信号是在调用了m_pGenCode->start()时发送的,当start()执行时,会创建一个新的线程,同时发送一个started()信号.所以QThread::started()信号是在新的线程中发送的.

this在旧的主线程中, 所以默认是采用队列的连接模式.

 2.

connect(m_pGenCode, &QThread::started,[this]() {
qInfo() << "started lambda:" <<QThread::currentThreadId(); 
});

直接在信号后面写lambda函数,这时候没有接收者,默认这个lambda函数将在新的线程中执行,也即发射信号的线程中执行.采用直接连接模式.

3.

  connect(m_pGenCode, &QThread::started,this,[this]() {qInfo() << "started lambda:" << QThread::currentThreadId();})

在接收者位置多了this,即主窗口线程对象. 这时候发送者与接收者虽然都在同一个线程中,但是信号的发送位置是在新线程中,所以默认为队列连接模式. 这个lambda函数将在this所在线程中执行.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com