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을보십시오.
알람 또는 ualarm 기능을 사용하지 마십시오. 공정이 힘들 때 정밀도가 떨어집니다.