gpt4 book ai didi

c++ - 是否可以将处理程序附加到系统计时器?

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:33 25 4
gpt4 key购买 nike

我想为以下事件注册处理程序:“系统时钟计时器递增秒计数器”。是否可以为此事件附加处理程序?换句话说,我想每秒调用一个适当的函数。看来下面的解决方案很糟糕:

#include <ctime>

bool checkTimer(int sec_now)
{
time_t t= time(0);
int sec=localtime(&t)->tm_sec;
if(sec_now!=sec)
return true;
return false;
}

void callback()
{
//handler
}

int main()
{
while(true)
{
time_t t= time(0);
int sec_now=localtime(&t)->tm_sec;
while(!checkTimer(sec_now)){ }
callback();
}
}

这段代码如我所愿。但我认为这是不好的方式。你能提出另一种方法吗?我正在使用 linux mint 14。

最佳答案

This code works as I want. But I think that it is bad way.

此实现的问题在于程序忙于循环:它消耗了一个内核上的所有 CPU 时间。有几种方法可以在 Linux 上实现间隔计时器。例如,您可以查看 timerfd

#include <iostream>
#include <inttypes.h>
#include <sys/timerfd.h>
#include <unistd.h>

void callback(void)
{
std::cout << "callback()" << std::endl;
}

int main(void)
{
int tfd;
uint64_t count;
// Interval timer that expires every 1 second
struct itimerspec timer = {
.it_interval = {1, 0}, // interval for periodic timer
.it_value = {1, 0}, // initial expiration
};

tfd = timerfd_create(CLOCK_MONOTONIC, 0);
timerfd_settime(tfd, 0, &timer, NULL);

while (true) {
read(tfd, &count, sizeof(count));
callback();
}
close(tfd);

return 0;
}

关于c++ - 是否可以将处理程序附加到系统计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23578385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com