-
DLYJOB im CL
Im CL kann ich DLYJOB benutzen mit Angabe von einer Anzahl Sekunden, die gewartet werden soll.
Gibt es eine kleinere Einheit als Sekunden ?
Ich möchte gerne 1/5 Sekunde angeben.
mfg. Ludger
-
Hello,
mir persönlich ist da nix bekannt.
Abgesehen davon, dass das System eh macht was es will. (Will sagen, wenn man sagt DLYJOB X kanns machmal auch ein wenig mehr sein, wie beim Fleischer)
Du könntest Dir ne eigene Schleife basteln, die so ungefähr Deine Anforderung abdeckt.....
k.
-
Es gibt hierzu einen MI-Befehl, der einen Wait als kleinste Einheit von 1ms erlaubt.
Hier noch meine Quelle (mit meinem MI-Compiler oder dem API zu erstellen):
Code:
DCL SPCPTR PWAITDECTIME PARM;
DCL OL *ENTRY (PWAITDECTIME) PARM EXT;
DCL DD WAITDECTIME PKD(15,0) BAS(PWAITDECTIME);
DCL DD WAITSTRUCT CHAR(16);
DCL DD WAIT1 BIN(4) DEF(WAITSTRUCT) POS(1);
DCL DD WAIT2 BIN(2) UNSGND DEF(WAITSTRUCT) POS(5);
DCL DD * BIN(2) DEF(WAITSTRUCT) POS(7) INIT(0);
DCL DD WAITOPT CHAR(2) DEF(WAITSTRUCT) POS(9)
INIT(X"2000");
DCL DD * CHAR(6) DEF(WAITSTRUCT) POS(11)
INIT((6)X"00");
DCL DD GESAMTZEIT PKD(31,0);
#DEBUG
ENTRY * (*ENTRY) EXT;
CMPNV(B) WAITDECTIME,0/HI(ZEIT_POSITIV);
NEG(S) WAITDECTIME;
ZEIT_POSITIV:
MULT(R) GESAMTZEIT,WAITDECTIME,P"0.625142";
DIVREM WAIT1,GESAMTZEIT,P"65536",WAIT2;
#NODEBUG
BRK ".WAITTIME";
WAITTIME WAITSTRUCT;
#DEBUG
RTX *;
DCL EXCM MCH1202 EXCID(H'0C02',H'0C0A') BP(FEHLER) IMD
CV(X"00000000");
FEHLER:
CPYNV WAITDECTIME,P"100000";
B ZEIT_POSITIV;
PEND;
-
@ kuempi
Mit der Schleife (Zähler laufen lassen) möchte ich nicht arbeiten. Die Systeme werden immer schneller und um dieselbe Wartezeit zu erreichen, müsste der Zähler immer höher geschraubt werden.
@baldur
ich habe mich noch nicht mit MI-Compiler etc. beschäftigt. Vielleicht mal später, wenn ich mehr Zeit habe.
Vielen Dank für die Antworten
Ludger
-
Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.
-
Zitat von hebichel
Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.
Wie geht das ?
mfg.
-
Zitat von hebichel
Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.
Korrigiere mich, sollte ich falsch liegen aber ...
soweit ich weiß, kann man bei sleep() auch nur Sekunden und keine kleinere Zeiteinheit angeben!
Birgitta
-
WaitTime für alle: It work's !!!
sleep() auf der AS/400 funktioniert tatsächlich anders.
Diese Funktion ist auf jedem System anders implementiert und hängt häufig von TICKS-Parameter ab.
Auf der AS/400 ist das leider 1 Sekunde, unter Windows 1/1000-Sekunde, unter Unix/Linux (eben je nach Implementation) auch schom mal 1/60-Sekunde.
Doch hier nun für alle RPG-ILE-Freaks:
Code:
hactgrp(*caller) dftactgrp(*no) bnddir('QC2LE')
d WaitTime pr extproc('waittime')
d pMI_Time 8
d pMI_Options 5U 0 value
d WaitInterval ds 8
d WaitPart1 10U 0
d WaitPart2 10U 0
d WAIT_NORMAL c const(0)
d WAIT_MOD_AS_ENTER...
d c const(32768)
d WAIT_MOD_AS_LEAVE...
d c const(16384)
d WAIT_MPL_SET c const(8192)
d WAIT_SIGNALS c const(4096)
d WaitOptions s 5U 0 inz(WAIT_NORMAL)
d WaitFactor s 15p 5
d WaitMSeconds s 21p 0
c *entry plist
c parm WaitFactor
c
c eval WaitMSeconds = WaitFactor * 1000000
c if WaitMSeconds = *zero
c return
c endif
c
c eval WaitPart1 = %div(WaitMSeconds:1048576)
c eval WaitPart2 = %rem(WaitMSeconds:1048576) * 4096
c
c callp WaitTime(WaitInterval:WaitOptions)
c return
Das Aufsplitten des Intervals liegt in der internen Darstellung eines Zeitwertes in Microsekunden (1/1000000) in den Bits 1-56 (57-64 = *4096) müssen 0 sein.
-
Hallo,
mit usleep geht's etwas einfacher. Funktioniert genauso wie sleep, nur dass man die Delay-Zeit in Mikrosekunden angibt. Nachfolgend ein Beispiel für fast 1 Sekunde:
D uSleep PR 10I 0 ExtProc('usleep')
D 10U 0 Value
*
C CallP uSleep(999999)
Gruß,
KM
-
Ok, sleep() oder usleep() abhaengig davon wie genau man es haben moechte. Es funktioniert.
Sleep well
Gruss
Helge Bichel
-
Ich habe das mit dem USLEEP ausprobiert, das klappt auch gut.
Mir ist nicht ganz klar, wie die Zusammenhänge sind.
Wird die Funktion vom Betriebssystem zur Verfügung gestellt ?
Das Programm muss dann als Modul erstellt werden (Auswahl 15).
Beim Binden braucht USLEEP dann nicht angegeben zu werden ?!
mit WRKOBJ kann ich auch kein USLEEP finden ?
Was steckt eigentlich dahinter ?
mfg. Ludger
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By schatte in forum NEWSboard Programmierung
Antworten: 19
Letzter Beitrag: 10-01-07, 11:32
-
By RLPforum in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-01-07, 14:58
-
By kuempi von stein in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-07-06, 14:34
-
By bo1 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 23-06-06, 15:00
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks