Тем не менее, моя проблема заключается в том, что я должен внедрить для университета простую версию 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" и "не истек срок ожидания"

В чем проблема?

Ответы на вопрос(0)

Ваш ответ на вопрос