-
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
-
Die sleep, usleep and vile andere funktionen sind C-funktionen und werden durch
bnddir('QC2LE')
ins rpg program eingebunden.
Es ist nicht notwendig ein modul zu erstellen (PDM 15), einfach das program ganz normal mit PDM 14 kompilieren.
Gruss
Helge
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