Anmelden

View Full Version : sleep() bzw. usleep() funktionieren nicht



hteufl
18-12-18, 13:36
Hallo,

ich habe mit den beiden C-Routinen ein Problem, da sie nicht funktionieren wie sie sollten! Bei usleep(5000000) sollte der Job 5 Sekunden warten - macht er aber nicht. Im Debugmodus wird ohne Delay die nächste Instruktion ausgeführt. Ich bin mit meinem Latein am Ende!
Die Funktion Sleep(5) verzögert lt. Debug etwas mehr als 5 Sekunden? Also ich weiss nicht mehr wo der Fehler liegen kann.
Auszug aus PGM:
Dsleep pr 10i 0 extproc('sleep')
D interval 10u 0 value

Dusleep pr 10i 0 extproc('usleep')
D microseconds 10u 0 value

Im Programm sieht die Verzögerung so aus:

// Berechnung neue Aufrufzeit
write key; // Funktionstasten
write auslctl; // Sub-Datei

Nexttime = %time() + %seconds(psleep); // nächste Subfileaktualisierung

usleep(5000000); // 5 Sek. Verzögerung bis zur nächsten SBF-Aktualisierung


Die Compilierung des Moduls verläuft ohne Fehler. Das Programm läuft bis auf die Verzögerung auch. Hat jemand eine Idee warum die beiden C-Funktionen nicht richtig funktionieren?

Vielen Dank im Voraus

Hermann

Pikachu
18-12-18, 14:02
usleep()--Suspend Processing for Interval of Time (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/usleep.htm)

Error Conditions > EINVAL > The time interval specified 1,000,000 or more microseconds.

dschroeder
18-12-18, 16:24
Es gibt noch die Funktion sleep. Die bekommt Sekunden als Parameter:

D sleep PR 10U 0 extproc('sleep')
D seconds 10U 0 value

hteufl
18-12-18, 16:40
Vielen Dank für Eure Antworten! Mir war nicht bewusst, dass usleep() nur bis 999.999 Mikrosekunden arbeiten kann (Danke für die Doku Pikachu). Ich habe mich vom 10 stelligen unsigned Field beirren lassen. Da meiner Meinung nach die Sleep() Funktion auch nicht präzise arbeitet versuche ich mehrere usleep() Anweisungen hintereinander.

Danke Euch allen
Hermann

Fuerchau
18-12-18, 23:25
Vielleicht geht einfach DLYJOB per CLP?
Und genau sind die auch nicht.