Eine halbe Sekunde sind 500.000.000 Nanosekunden, Ihr Code sollte also lauten:
tim.tv_sec = 0;
tim.tv_nsec = 500000000L;
Aus heutiger Sicht schläft Ihr Code für 1.0000005 s (1 s + 500 ns).
Kalt. Nur noch eine Frage. Ich teste dies zweimal mit gettimeofday() und bekomme den Unterschied. Ich habe daher einen Unterschied von einer halben Sekunde. Aber es gab auch einen sehr kleinen Bruchteil einer Sekunde, aufgrund der CPU-Verarbeitungszeit annehmen. Wie kann ich das berechnen und von meiner Schlafzeit abziehen? Meine Zeit kam auf: 0,501033 Sek
– pnizzle
7. Oktober 2011 um 7:50 Uhr
@pnizzle: Was genau erhoffst du dir mit dieser Subtraktion?
– NPE
7. Oktober 2011 um 7:51 Uhr
Ich hoffe, genau 0,500000 Sekunden zu erreichen. Vielen Dank
– pnizzle
7. Oktober 2011 um 7:54 Uhr
Die meisten Timer sind nicht so feinkörnig. Besonders auf einer Multitasking-Maschine ist es schwierig, genau zu schlafen.
– David
7. Oktober 2011 um 7:56 Uhr
Ich habe ein bisschen gegoogelt und eine Funktion clock() gefunden. Was genau macht das? Ist die CPU-Auslastung zeitlich?
– pnizzle
7. Oktober 2011 um 8:05 Uhr
David
tv_nsec ist die Ruhezeit in Nanosekunden. 500000 us = 500000000 ns, also wollen Sie:
Dies bezieht sich auf lange Doppel. als zweites Argument von nanosleep() vom Typ long double. siehe stackoverflow.com/questions/1380653/…
– EsmaeelE
5. August 2017 um 22:12 Uhr
Der Typ der zweiten Variablen der Nanosleep-Struktur ist long. Das L wird verwendet, um die Zahl in umzuwandeln longweil int möglicherweise zu klein, um den Wert zu verarbeiten. Einige Sicherheitsstandards (NASA, MISRA) erzwingen die Angabe des Zahlentyps, wenn die Zahl größer als 2^16 ist, um fehlerhaften Code zu vermeiden.
– KamilCuk
9. Juli 2018 um 15:06 Uhr
500000 Mikrosekunden sind 500000000 Nanosekunden. Sie warten nur 500 ns = 0,5 µs.
Sonnige Schukla
Das hat bei mir funktioniert….
#include <stdio.h>
#include <time.h> /* Needed for struct timespec */
int mssleep(long miliseconds)
{
struct timespec rem;
struct timespec req= {
(int)(miliseconds / 1000), /* secs (Must be Non-Negative) */
(miliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */
};
return nanosleep(&req , &rem);
}
int main()
{
int ret = mssleep(2500);
printf("sleep result %d\n",ret);
return 0;
}
Normalerweise verwende ich einige #define und Konstanten, um die Berechnung zu vereinfachen: