[NEWSboard IBMi Forum]

Thema: DLYJOB im CL

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695

    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

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

  4. #4
    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

  5. #5
    Registriert seit
    Jul 2003
    Beiträge
    338

    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

  6. #6
    Registriert seit
    Jun 2006
    Beiträge
    5
    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

  7. #7
    Registriert seit
    Jul 2003
    Beiträge
    338

    Cool

    Hallo Helge,

    ich habe es probiert, es funktioniert.

    Ich habe einige eigene Service-Programme und -Funktionen, sowie Module erstellt.

    Wäre es ratsam, dafür eine eigene *BNDDIR einzurichten und die eigenen Service-Programm etc. dort anzubinden ?

    Dann könnte ich evtl. verzichten auf eigene CLs, die das Binden jeweils durchführen. (Definition dann einfach in der H-Bestimmung.

    mfg. Ludger

  8. #8
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Du kannst Dein Programm ganz normal mit 14 kompilieren. Du musst es nicht als Modul erstellen. Die Prozeduren SLEEP und USLEEP sind externe Prozeduren, die vom Serviceprogramm QP0SSRV1 (Bibliothek QSYS) exportiert werden. Diese Prozeduren werden immer gefunden und Du musst dafür kein Binderverzeichnis angeben (auch nicht QC2LE). Da es sich um exportierte Prozeduren handelt, kannst Du sie auch nicht als Objekte finden.

    Gruß,
    KM

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das Service-Programm QP0SSRV1, in dem sich die Funktionen sleep und usleep (Achtung Kleinschreibung!) ist im Binderverzeichnis QUSAPIBD hinterlegt.

    Das Binderverzeichnis QUSAPIBD wird von den Compileren automatisch eingebunden.

    Birgitta
    Birgitta Hauser

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

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
  •