|
Thanks Scott, this is great. (More methods then I'd realized)
Thanks to everyone else who took the time to reply.
Andy
----- Original Message -----
From: "Scott Klement" <klemscot@xxxxxxxxxxxx>
To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx>
Sent: Wednesday, February 26, 2003 4:18 PM
Subject: Re: DLYJOB in RPG
>
> On Wed, 26 Feb 2003, Andy Hautamaki wrote:
> >
> > I have a series of batch jobs that if they get a record lock on update
will
> > call a CLP program and pass it how long to do a DLYJOB and then after
the
> > 'Delay' my RPG programs will try to retrieve the record again.
> >
>
> Well... you could just do OVRDBF FILE(MYFILE) WAITRCD(xxx), and not have
> to do a delay at all... (Unless I don't understand your question
> correctly)
>
> > My question is, instead of doing this 'DLYJOB' from a CLP can it be done
> > directly from within RPG? ........ API maybe????
> >
>
> If for some reason, you don't want to use the WAITRCD() method above,
> here's a few ways of doing delays in an RPG program. This is an actual
> program that compiles and runs :)
>
> H DFTACTGRP(*NO) BNDDIR('QC2LE')
>
> D QcmdExc PR extpgm('QCMDEXC')
> D command 200A const
> D length 15P 5 const
>
> d cmd s 200A
> D len s 15P 5
>
> D select PR 10I 0 extproc('select')
> D max 10I 0 value
> d read * value
> d write * value
> d except * value
> d timeout * value
>
> D tv ds
> D tv_sec 10I 0
> D tv_usec 10I 0
>
> D sleep PR 10U 0 extproc('sleep')
> D seconds 10U 0 value
>
> D usleep PR 10I 0 extproc('usleep')
> D microsecs 10U 0 value
>
> *
> * QcmdExc can run just about any command that you
> * can type from the command-line, including DLYJOB
> *
> c 'one' dsply
> c callp QcmdExc('DLYJOB DLY(1)': 200)
>
> *
> * Or, if you're feeling nostalgic, here's another way to
> * call QCMDEXC
> *
> c 'two' dsply
> c eval cmd = 'DLYJOB DLY(1)'
> c eval len = 200
>
> c call 'QCMDEXC'
> c parm cmd
> c parm len
>
> *
> * Another exciting way would be to use the select() API.
> * This has the advantage that you can wait for strange time
> * values... such as 1.8 seconds...
> *
> c 'three' dsply
> c eval tv_sec = 1
> c eval tv_usec = 800000
> c callp select(0: *NULL: *NULL: *NULL:
%addr(tv))
>
> *
> * Then, there's the ILE C runtime (requires BNDDIR('QC2LE'))
> *
> c 'four' dsply
> c callp sleep(1)
>
> *
> * Or, the ILE C runtime that can do things in microseconds
> * (also requires BNDDIR('QC2LE'))
> *
> c 'five' dsply
> c callp usleep(1000000)
>
> c eval *inlr = *on
>
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.