首页 > 其他分享 >同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?

同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?

时间:2024-03-10 10:55:34浏览次数:29  
标签:触发 定时器 Thread working 同个 线程 延迟

同个线程里,如果线程正在忙过程中,定时器时间到了会被延迟触发吗?

在同一线程中,如果线程正在忙过程中,定时器的触发事件会被延迟,直到线程空闲下来才会被触发。这是因为在QT中,线程和定时器的处理都是通过事件循环来完成的。当线程处于忙碌状态时,事件循环将会被阻塞,直到线程执行完当前的工作才会继续运行事件循环,处理定时器的触发事件。

举个例子,假设我们在同一线程中创建了一个定时器,并将其定时器时间设置为1秒。随后,我们在线程中模拟了一个耗时操作,例如循环输出一些信息,并在每次循环结束后调用QThread::sleep()函数,以模拟线程正在执行某些耗时操作。在这种情况下,如果定时器的触发时间与线程忙碌的时间重叠,那么定时器的触发事件将会被延迟,直到线程执行完当前的工作才会被触发。

下面是一个简单的示例代码,演示了在同一线程中,当线程处于忙碌状态时,定时器的触发会被延迟的情况:

#include <QCoreApplication>
#include <QThread>
#include <QTimer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QTimer timer;
    connect(&timer, &QTimer::timeout, [](){
        qDebug() << "Timer triggered in thread";
    });
    timer.start(1000);

    for (int i = 0; i < 10; ++i) {
        qDebug() << "Thread working" << i;
        QThread::sleep(1);
    }

    return a.exec();
}

在这个例子中,我们创建了一个定时器,并将其定时器时间设置为1秒。随后,我们模拟了一个耗时操作,在循环中输出一些信息,并在每次循环结束后调用QThread::sleep()函数,以模拟线程正在执行某些耗时操作。在程序运行时,我们可以看到在线程处于忙碌状态时,定时器的触发事件会被延迟,直到线程执行完当前的工作才会被触发。

输出结果

Thread working 0
Thread working 1
Thread working 2
Thread working 3
Thread working 4
Thread working 5
Thread working 6
Thread working 7
Thread working 8
Thread working 9
Timer singleShot triggered in thread
Timer triggered in thread
Timer triggered in thread

标签:触发,定时器,Thread,working,同个,线程,延迟
From: https://www.cnblogs.com/huanyinglvtuan/p/18063843

相关文章

  • 面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会
    写在开头面试官:小伙子请聊一聊Java中的精灵线程?我:什么?精灵线程?啥时候精灵线程?面试官:精灵线程没听过?那守护线程呢?我:守护线程知道,就是为普通线程服务的线程嘛。面试官:没了?守护线程的特点,怎么使用,需要注意啥,Java中经典的守护线程都有啥?我:不知道。。。这的天,面试一个10K的工作,......
  • Java多线程
    1.java线程实现/创建的方式(主要是两种)继承Thread类本质是通过实现Runnable接口的一个实例,代表一个线程的实例publicclassMyThreadextendsThread{publicvoidrun(){System.out.println("run()")}}MyThreadthread=newMyThread();thread.st......
  • python面试题 :进程、线程、协程的区别
    进程、线程和协程区别1.进程进程是系统资源分配的最小单位,系统由一个个进程(程序)组成一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动......
  • c++多线程
    1.线程库的使用创建进程#include<iostream>#include<thread>//线程库头文件usingnamespacestd;voidthread_1(){cout<<"子线程1"<<endl;}intthread_2(intx){cout<<"子线程2"<<endl;returnx;}intm......
  • 计算机操作系统之 进程 线程
     一、并行和并发在介绍进程、线程和协程这三个概念之前,有两个操作系统中的相关概念需要简单解释一下:并行和并发。并行:同一时刻,指多个任务同时执行。并发:指在一个时间段内,多个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(即多个任务在同一处理机......
  • Unity3D 多线程定时器的原理与实现详解
    Unity3D提供了丰富的功能和工具,让开发者可以轻松地创建各种类型的游戏。其中,定时器是一个非常重要的功能,在游戏开发中经常会被使用到。Unity3D中并没有提供原生的多线程定时器功能,但我们可以通过一些技巧和方法来实现一个多线程定时器。对啦!这里有个游戏开发交流小组里面聚集了......
  • C++保证线程安全的方式
    1、互斥量可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。2、原子操作std::atomic<int>mutex(1);对原子变量的操作是线程安全的。3、读写锁std::shared_mutexmutex;//读者:共享锁定mutex.lock_shared();mutex.unlock_shared();//写者:独占锁定mutex.lock......
  • 进程和线程
    进程的概念,组成和特征进程状态转换进程控制进程通信......
  • C#-关于多线程下锁的使用,提高共享资源利用率的问题思考
    前一段时间阅读某公司项目的代码,发现类的单例模式无处不在,为了控制单例全局对象属性跨线程访问到处加锁,由于每个研发人员技术及业务水平参差不齐,锁的控制范围可能会扩大化,真正需要锁住的变量利用率降低。举例:全局变量intCount=0;定义锁对象objectCountLocker=newObject......
  • 多线程系列(十五) -常用并发工具类详解
    一、摘要在前几篇文章中,我们讲到了线程、线程池、BlockingQueue等核心组件,其实JDK给开发者还提供了比synchronized更加高级的线程同步组件,比如CountDownLatch、CyclicBarrier、Semaphore、Exchanger等并发工具类。下面我们一起来了解一下这些常用的并发工具类!二、常用并发......