PDA

View Full Version : DLYJOB im CL



Seiten : [1] 2

loeweadolf
15-07-06, 23:22
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

kuempi von stein
16-07-06, 07:40
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.

Fuerchau
16-07-06, 10:01
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):



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;

loeweadolf
16-07-06, 13:20
@ 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

hebichel
17-07-06, 00:23
Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.

loeweadolf
17-07-06, 08:43
Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.

Wie geht das ?

mfg.

B.Hauser
17-07-06, 08:54
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

Fuerchau
17-07-06, 10:33
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:



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.

KM
17-07-06, 15:38
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

hebichel
18-07-06, 13:13
Ok, sleep() oder usleep() abhaengig davon wie genau man es haben moechte. Es funktioniert.

Sleep well :rolleyes:

Gruss

Helge Bichel