zweite Nanosekunden - struct itimerspec
bin ich Auffüllen der timespec-Struktur. Die Absicht ist es, Benutzer wird immer die Eingabe von Werten in Sekunden (0,01 Sekunden), so sind wir die Umwandlung, die die Sekunden bis Nanosekunden mit: lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;
wo variable static long sec_to_nsec = 1000000000;
und dann verwenden Sie es als ein argument für settime: timer_settime(timerid,0,&its,NULL)
. Aber Sie tun es auf eine Fehlermeldung tritt auf: settimer failed: Invalid argument
Bitte helfen Sie mir.
Vielen Dank im Voraus.
enter code here
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespec it_interval; /* Timer interval */
struct timespec it_value; /* Initial expiration */
};
Den code, den ich versuche ist hier:
static long sec_to_nsec = 1000000000;
lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;
/* Setting timer interval */
its.it_interval.tv_sec=0;
its.it_interval.tv_nsec=1;
/* Setting timer expiration */
its.it_value.tv_sec=0; //First expiry after 1 sec
its.it_value.tv_nsec=lt_leak_start;
timer_create(CLOCK_REALTIME,&sevp,&timerid);
if(timer_settime(timerid,0,&its,NULL)==-1) {
perror("settimer failed");
exit(1);
}
Sind Sie sicher, dass
Ja, es hat funktioniert. Ich überprüfte die Rücksendung Wert. Für Einfachheit habe ich nicht, alle diejenigen, die hier. Die Fehlermeldung ist in
Warum bist du unter einen Wert in Sekunden und konvertieren Sie es in den Nanosekunden-wenn Sie können einfach speichern Sie Sie direkt in
Dies ist, weil
Sie haben keine Bruchzahlen. Sie arbeiten mit Umgebungsvariablen, die Sie behandeln, als ganze Sekunden, und speichern Sie Sie direkt in die tv_sec Feld.
timer_create
gearbeitet? Du bist nicht die überprüfung seiner Rückkehr Wert.Ja, es hat funktioniert. Ich überprüfte die Rücksendung Wert. Für Einfachheit habe ich nicht, alle diejenigen, die hier. Die Fehlermeldung ist in
timer_settime
Funktion, nicht timer_create
.Warum bist du unter einen Wert in Sekunden und konvertieren Sie es in den Nanosekunden-wenn Sie können einfach speichern Sie Sie direkt in
timespec.tv_sec
?Dies ist, weil
timespec.tv_sec
nicht gebrochene Werte.Sie haben keine Bruchzahlen. Sie arbeiten mit Umgebungsvariablen, die Sie behandeln, als ganze Sekunden, und speichern Sie Sie direkt in die tv_sec Feld.
InformationsquelleAutor kingsmasher1 | 2011-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen Sie die environment-variable als double. Lagern Sie den zweiten Teil in tv_sec und die Nanosekunde Teil in tv_nsec.
2.5 secs
alsits.it_value.tv_sec=2
undits.it_value.tv_nsec=500000000
? Ich dachte, der Benutzer kann entweder in Sekunden oder Nanosekunden 🙁Das ist, wie Sie eigentlich für das füllen der timespec. Ein zweiter Teil, und eine Nanosekunde Teil.
Sie lösen ein großes problem für mich. Tonnen und Tonnen von Dank.
InformationsquelleAutor Erik
tv_nsec
darf nicht größer als 999.999.999 ein. Sie setzen es mehr als das.Führen Sie einen Scheck. Wenn es der FALTENBALG 1 Sek., Sie tun, wie Sie täte, wenn seine größer oder gleich berechnen Sie die Sekunden getrennt, und ordnen Sie Sie tv_sec, während der rest geht an tv_nsec.
Tonnen Dank. Warum es nicht auf mich 🙁
Was tun, wenn es 2,5 Sek? Es sind 2 Komponenten. Gewusst wie: Auffüllen? Können wir Auffüllen der tv_sec und tv_nsec getrennt, in diesem Fall (wird es funktionieren?).
tv_sec=2
tv_nsec=500000000
?Ja, das wird gut funktionieren.
InformationsquelleAutor Milan