[NEWSboard IBMi Forum]

Thema: DLYJOB im CL

Hybrid View

  1. #1
    Registriert seit
    Jul 2003
    Beiträge
    331

    Cool 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

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    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.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.256
    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;
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jul 2003
    Beiträge
    331
    @ 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

  5. #5
    Registriert seit
    Jun 2006
    Beiträge
    5
    Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.

  6. #6
    Registriert seit
    Jul 2003
    Beiträge
    331
    Zitat Zitat von hebichel
    Viel einfacher ist es doch die sleep() funktion in einen rpg-program zu benutzen.
    Wie geht das ?

    mfg.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.878
    Zitat 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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.256

    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    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

  10. #10
    Registriert seit
    Jun 2006
    Beiträge
    5
    Ok, sleep() oder usleep() abhaengig davon wie genau man es haben moechte. Es funktioniert.

    Sleep well

    Gruss

    Helge Bichel

  11. #11
    Registriert seit
    Jul 2003
    Beiträge
    331

    Talking

    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

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. "Vary on" in CL
    By RLPforum in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-01-07, 14:58
  4. Suche Liste Ersatzoperatoren im CL
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-07-06, 14:34
  5. Übergabeparameter im CL Script
    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
  •