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。
不要使用警报或警报功能,当您的过程难以完成时,精度会降低。