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機能を使用しないでください。プロセスが困難な場合、精度が低くなります。