网站网址查询ip,wordpress请提供一个地址才能继续,江苏通信建设交易中心网站,网页添加兼容性站点C笔记之将定时器加入向量并设置定时器的ID为i
code review! 文章目录 C笔记之将定时器加入向量并设置定时器的ID为i关于代码中的void operator()() 运行 代码 #include chrono
#include iostream
#include thread
#include vector// 定义定时…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::vectorTimer timers, int i, std::chrono::seconds interval) {Timer timer(i, interval);timers.push_back(timer);
}int main() {// 创建一个包含3个定时器的向量std::vectorTimer 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()() 函数的地方。