Тем не менее, моя проблема заключается в том, что я должен внедрить для университета простую версию UDP для надежной связи; тогда мне нужна лучшая точность, чем секунды; Могу ли я иметь проблемы, если я использую только наносекунды?
у простую программу, которая проверяет, превышает ли истекшее время более 1 секунды. Я беру время начала с помощью clock_gettime (), затем вызываю sleep (5), беру новое время и проверяю, больше ли разница, чем 1; Я сплю 5 секунд, тогда оно должно быть больше 5, но моя программа выводит странный результат.
это код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int main()
{
struct timespec tv1,tv3,expected;
struct timespec nano1;
tv1.tv_nsec = 0;
tv3.tv_nsec = 0;
expected.tv_nsec = 400000;
if(clock_gettime(CLOCK_MONOTONIC,&tv3) == -1){
perror(NULL);
}
sleep(5);
if(clock_gettime(CLOCK_MONOTONIC,&tv1) == -1){
perror(NULL);
}
long nsec = tv1.tv_nsec - tv3.tv_nsec;
if(nsec>expected.tv_nsec){
printf("nsec runned: %ld nsec timeout: %ld\n",nsec,expected.tv_nsec);
}
printf("elapsed nanoseconds: %ld\n",nsec);
if((nsec>expected.tv_nsec))
printf("expired timer\n");
else
printf("not expired timer\n");
exit(EXIT_SUCCESS);
}
Вывод моей программы:
"истекшие наносекунды: 145130" и "не истек срок ожидания"
В чем проблема?