Qt 信号槽

关于Qt 信号槽的笔记

信号槽依赖于Qt自身的循环,每个线程都有自身的一个循环

测试代码如下

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::QtWidgetsApplication1Class())
{
    ui->setupUi(this);
	th1 = new QThread;
	ti1 = new QTimer;
    th1->moveToThread(th1);
    //ti1->moveToThread(th1);
    ti1->setInterval(10);
    th1->start();


    //QTimer::singleShot(0, th1, [&]() {
        ti1->start();
        //});

    connect(ti1, &QTimer::timeout, th1, [=]() {
        QThread::msleep(100);
        qDebug() << "1111" << QThread::currentThreadId;
        });

	QTimer::singleShot(1000, this, [&]() {
        //qDebug() << "msleep" << QThread::currentThreadId;
        //QThread::msleep(5000);
        ti1->stop();
        qDebug() << "quit" <<QThread::currentThreadId;
		});

}

总结

  • 当信号发送线程和槽函数执行线程都同属于同一个线程时,槽函数执行速度慢于信号间隔,则在槽函数执行期间应该发送的信号实际上是被忽略的,并不会被放入事件队列中
  • 当信号与槽函数属于两个线程时,槽函数执行速度慢于信号间隔,则信号会被放入事件队列中,不断的调用槽函数,直到信号用完
  • 当信号线程阻塞时,信号也会被阻塞,槽函数也会因为没有信号而不执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值