home *** CD-ROM | disk | FTP | other *** search
- /* Rexx */
-
- /*******************************************************************
-
- The following swatch of Rexx code illustrates how you might use
- some functions in the YDBAUTIL function package to do multi-
- threaded Rexx programming.
-
- In the example below, we are going to display a "progress" message
- to show some sign of life to a user while the program waits on
- some external event. In this case, we just want to display a
- "counter" on the screen while the main thread is waiting for
- a user to press any key to release the "pause" command.
-
- *******************************************************************/
-
- /* Register Rexx external functions */
- If RxFuncQuery('SYSSLEEP') Then
- Do
- Call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
- Call SysLoadFuncs
- End
- If RxFuncQuery('RxCreateRexxThread') Then
- Do
- Call RxFuncAdd 'RxYdbaUtilInit','YDBAUTIL','RxYdbaUtilInit'
- Call RxYdbaUtilInit
- End
-
- /* InStorage code to be executed on another thread while waiting for */
- /* response from partner */
- instr = "Say;Say 'Executing instruction(s) at partner LU';Say"
- instr = instr || ";Say 'Waiting for external event to end ...'"
- instr = instr || ";call time 'r';do forever;call syssleep 2;call charout ,'0d'x||Trunc(time('e')) 'Seconds elapsed';end"
- instr = RxTokenize(instr)
-
- tid = RxCreateRexxThread('&'instr)
-
- /* ... perform something which waits on an external event */
- '@pause'
- /* ... (such as an APPC "Receive_And_Wait", etc.) */
-
- call rxkillthread tid;say
-
- Exit