usleep () zur Berechnung der verstrichenen Zeit verhält sich seltsam

Ich berechne die in Millisekunden verstrichene Zeit für jeden nachfolgenden Aufruf der Handlerfunktion mit dem folgenden Code. Wenn ich den Ruhezustand (1000) verwende, d. H. 1 ms, beträgt die Zeitdifferenz zwischen jedem Anruf 10 ms, und wenn ich den Ruhezustand (1000000) verwende, d. H. 1 s, fällt das Zeitintervall zwischen jedem Anruf überraschenderweise auf weniger als 1 ms ab. Es folgt das Code-Snippet:

    #include<stdio.h>
    #include<stdlib.h>
    #include<sys/time.h>
    #include<unistd.h>

    struct timeval start_time;
    void handler(int);

    int main()
    {
            struct timeval current_time;
            int i=0;
            gettimeofday(&start_time,0);
            gettimeofday(&current_time,0);
            printf("%012.3fms: emulationbegins\n",((current_time.tv_usec-start_time.tv_usec)/1000.0));

            while(i++<5)
            {
                    usleep(1000); // compare with usleep(1000000)
                    handler(i);
            }

            return 0;
    }

    void handler(int i)
    {
            printf("In Handler %d\n",i);
            struct timeval current_time;
            gettimeofday(&current_time,0);
            printf("%012.3fms: Handler Called\n",((current_time.tv_usec-start_time.tv_usec)/1000.0));
            return;
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage