当前位置: 首页 > news >正文

C++笔记之将定时器加入向量并设置定时器的ID为i

C++笔记之将定时器加入向量并设置定时器的ID为i

code review!

文章目录

  • C++笔记之将定时器加入向量并设置定时器的ID为i
    • 关于代码中的void operator()()

在这里插入图片描述
运行
请添加图片描述
代码

#include <chrono>
#include <iostream>
#include <thread>
#include <vector>// 定义定时器类
class Timer {public:Timer(int id, std::chrono::seconds interval) : id(id), interval(interval) {}void operator()() {std::this_thread::sleep_for(std::chrono::seconds(interval));std::cout << "Timer " << id << " expired!" << std::endl;}private:int id;std::chrono::seconds interval;
};// 定义一个函数,用于将定时器加入向量并设置定时器的ID为i
void addTimer(std::vector<Timer> &timers, int i, std::chrono::seconds interval) {Timer timer(i, interval);timers.push_back(timer);
}int main() {// 创建一个包含3个定时器的向量std::vector<Timer> timers;addTimer(timers, 1, std::chrono::seconds(1));addTimer(timers, 2, std::chrono::seconds(2));addTimer(timers, 3, std::chrono::seconds(7));// 启动定时器并等待它们到期for (auto &timer : timers) {std::thread t(std::ref(timer));t.detach(); // 将定时器线程分离,使其在后台运行}std::this_thread::sleep_for(std::chrono::seconds(10)); // 等待10秒钟,使所有定时器都有足够的时间到期return 0;
}

关于代码中的void operator()()

Timer timer(i, interval); 这一行实际上是在创建 Timer 对象,并且在这个过程中没有直接使用了 operator()() 函数调用运算符。
operator()() 函数调用运算符的使用方式是通过将 Timer 对象传递给 std::thread 的构造函数来实现的,如下所示:

std::thread t(std::ref(timer));

这里的 timer 是一个 Timer 类型的对象。通过传递 std::ref(timer)std::thread 构造函数,你实际上在创建一个新的线程,并在这个新线程中调用了 timer 对象的 operator()() 函数。这就是代码中使用 operator()() 函数的地方。

http://www.lryc.cn/news/118328.html

相关文章:

  • 将一组元素四舍五入到指定精度(小数位数)numpy.around()
  • tinyint这个值在MySQL中的值有哪些
  • JVM 内存结构
  • 基于百度语音识别API智能语音识别和字幕推荐系统——深度学习算法应用(含全部工程源码)+测试数据集
  • 数字万用表测量基础知识--使用DMM测量电流
  • 【BASH】回顾与知识点梳理(二十)
  • Arduino驱动SGP40空气质量传感器(气体传感器篇)
  • 识别和应对内存抖动
  • 3.3用于共享数据保护的替代工具
  • 探索数据之美:初步学习 Python 柱状图绘制
  • 647. 回文子串
  • cmake (更新中)
  • 【go语言基础】指针数组和数组指针
  • ModaHub魔搭社区——Milvus Cloud向量数据库
  • 【Java】常用Stream API
  • P1941 [NOIP2014 提高组] 飞扬的小鸟
  • Vue3+Element plus+pageHelper实现分页
  • 外贸路上那些哭笑不得的事情
  • 双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构
  • 构建可观测架构,从这5个方面着手
  • 前端面试的性能优化部分(7)每天10个小知识点
  • 【云原生】kubernetes中容器的资源限制
  • java Long型数据返回到前端失进度问题解决
  • 【设计模式】-策略模式:优雅处理条件逻辑
  • SpringBoot整合多数据源
  • CLIP论文精度
  • LouvainMethod分布式运行的升级之路
  • 【Node.js】低代码平台源码
  • docker 部署 xxl-job-admin
  • c++(空间配置器)[32]