![]() |
Hallo und herzlich Willkommen aus den Vereinigten Staaten, die UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| HP-UX HP-UX (Hewlett Packard UniX) ist Hewlett-Packard-eigene Implementierung des Unix-Betriebssystem, basierend auf System V |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| Fügen Sie die Ausgabe einer Abfrage an eine Variable, die in einem anderen Abfrage | hazno | Shell Programmierung und Scripting | 0 | 03-24-2009 08:52 PM |
| Mac OS X: Warum Sie Ihren Mac nicht schlafen oder Aufenthalt im Sleep-Modus | iBot | OS X Support RSS | 0 | 03-19-2009 10:50 PM |
| Umwandlung localtime zu unixtime | AshishK | UNIX für Fortgeschrittene und Experten | 2 | 10-30-2007 10:22 AM |
| Perl + localtime () | Optimus_P | Shell Programmierung und Scripting | 3 | 07-09-2003 05:32 PM |
| schlafen | Anna | UNIX for Dummies Questions & Answers | 5 | 07-10-2001 11:52 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread |
Bewertung:
|
Anzeige-Modi |
|
|
|
||||
|
Sleep & localtime Abfrage
Hi,
Ich arbeite auf HPUX Anwendung und ich hatte eine Anfrage in Bezug auf die Sleep & localtime Systemaufruf in HPUX. Hier ist der Code, den wir haben: const uint32_t WAKE_INTERVAL_SEC (30 * 60); while (true) ( / / Finden Sie heraus, wie spät es ist Zeit (& currentTime); / / Thread, um wakeup Uhr mit 30 Minuten, dh, wenn es derzeit 9.20 wakeup nach 10 Minuten, / / Wenn es derzeit 9.05, aufwachen nach 25 Minuten. / / Berechnen verbleibenden Anzahl von Sekunden in dieser halben Stunde. sleepTime \u003d WAKE_INTERVAL_SEC - (currentTime WAKE_INTERVAL_SEC%); while (1) ( sleep (sleepTime); / / Do reguläre Arbeit tptr \u003d localtime (& currentTime); wenn (12 \u003d\u003d tptr-> tm_hour & & tptr-> tm_min <WAKE_INTERVAL_MIN) ( / / Noon zu tun ) ) Erwartetes Verhalten: Wie im obigen Code, erwarten wir, dass jeder eine halbe Stunde, einige Arbeit zu tun, und wenn zu diesem Zeitpunkt passiert, werden zwischen 12 und 12:30 Uhr, dann tun wir auch mittags arbeiten. Tatsächliche Verhalten: Die meisten der Zeit es funktioniert wie erwartet. Aber einige Zeit, schlafen zu verlassen scheint, ein paar Sekunden vor 12.30 Uhr und so die Logik nicht und macht die Uhr arbeiten. Im Idealfall würde ich erwarten, dass die Uhr nicht Voraussetzung für die Arbeit, da Thread hat aufwachte um 12:30 Uhr und somit kann es nicht satisify mittags arbeiten Zustand. (Trace in syslog weist darauf hin, dass reguläre Beschäftigung hat um 12:30 Uhr, aber die Anmeldung selbst hätte sich etwas Zeit und ich vermute, Schlaf geweckt haben könnte früh) Frage: - Kann Schlaf aufwachen, bevor die geplante Zeit (andere als SIGALRM)? Gibt es noch andere Bedingungen, unter denen Schlaf aufwachen könnte vor dem geplanten Zeitpunkt? - Kann localtime für den Vergleich zurück falschen Zeit? - Ist es möglich, dass es einige Zeit Anpassungen erfolgt intern (kann für die innere Uhr Treibangeln etc), die Ergebnisse im Schlaf aufwachen eine zweite früher als erwartet oder lokaler Zeit damit eine Art der Anpassung aus irgendeinem Grund? Alle Eingaben in diesem Bereich sind willkommen. Thanks & Regards, nSv |
|
||||
|
Hi Jim,
Vielen Dank für die Antwort. Eigentlich Threads aufwachen können jederzeit auf der Grundlage der Scheduler, so dass die Logik war, um die Zeit der Thread zu schlafen, so dass im Einklang mit seiner 30-Minuten-Intervallen. Mit freundlichen Grüßen, nsvora |
|
||||
|
Ich habe versucht, um dies deutlich:
Sie können nicht garantieren, genau, wie lange schlafen. Sie haben, um einige Sloptank (fudge-Faktor) in der Sekunde Berechnung der einen oder anderen Weise, ist es nicht zu jeder Zeit perfekt - Beispiel setzt voraus, dass Sie POSIX kompatibel Zeit - dh., keine Schaltsekunden.: Code:
calculate duration of sleep: time_t how_long_to_sleep=1800; how_long_to_sleep-= time(NULL) % 1800; sleep(!how_long_to_sleep ? 1800 : how_long_to_sleep); Code:
time_t now=time(NULL); now=now % 1800; if( now < 2 && now > 1797) // sleep period ended close enough else // sleep period is off by too much fi |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|