gettimeofday - 问题是,如果你改变硬件时钟(例如使用 NTP) Boost - 不适用于此项目 clock() - 通常返回一个 4 字节整数,这意味着它的容量低,并且一段时间后它返回负数。
我更喜欢创建自己的类并每 10 毫秒更新一次,所以这种方式更灵活,我什至可以改进它以拥有订阅者。
class MyAlarm {
static int64_t tiempo;
static bool running;
public:
static int64_t getTime() {return tiempo;};
static void callback( int sig){
if(running){
tiempo+=10L;
}
}
static void run(){ running = true;}
};
int64_t MyAlarm::tiempo = 0L;
bool MyAlarm::running = false;
刷新它我使用setitimer:
int main(){
struct sigaction sa;
struct itimerval timer;
MyAlarm::run();
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &MyAlarm::callback;
sigaction (SIGALRM, &sa, NULL);
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 10000;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 10000;
setitimer (ITIMER_REAL, &timer, NULL);
.....
查看 setitimer 以及 ITIMER_VIRTUAL 和 ITIMER_REAL。
不要使用警报或报警功能,当您的过程辛苦工作时,您的精度会很低。