星期三, 11月 01, 2023

2001-11-07 如何顯示某些處理程序的百分比狀況?


如何顯示某些處理程序的百分比狀況?

某些程序可能需要較長的時間處理,例如 On-Line 處理大批資料時,系統僅顯示輸入暫停,
使用者根本不知道系統處理進度,也不知何時可以完成該項工作,往往會影響到使用者的工
作效率,所以在開發應用軟體時,針對耗時的程序,最好要考慮回應處理狀況給使用者。


File   : QRPGLESRC
Member : PROGSMSGR
Type   : RPGLE
Usage  : CRTBNDRPG PROGSMSGR
         Call PROGSMSGR

     H DEBUG  OPTION(*SRCSTMT:*NODEBUGIO)
      *====================================================================*
      *          Progress Percentage Message                               *
      *--------------------------------------------------------------------*
      *                                                                    *
      *  2001/11 Vengoal Chang                                             *
      *--------------------------------------------------------------------*
     Fimtmpf    if   e           k disk    infds(infdsx)
      *---------------------------------------------------------------------

     D infdsx          ds
     D  NbrOfRcds                    10i 0 overlay(infdsx:156)
     D  TwoPercent     s             10u 0 inz(0)
     D  RecordCnt      s             10u 0 inz(0)
     D  PercentComp    s             10u 0 inz(0)
     D InPrgVary       s             50    varying
     D InProgressMsg   s             50
     D ConstantPeriod  s             50    inz(*all'.')
      *    -------------------------------------------------------------
     D qmhsndpm        PR                  ExtPgm('QMHSNDPM')                   SEND MESSAGES
     D                                7    const                                ID
     D                               20    const                                FILE
     D                               73    const                                TEXT
     D                               10i 0 const                                LENGTH
     D                               10    const                                TYPE
     D                               10    const                                QUEUE
     D                               10i 0 const                                STACK ENTRY
     D                                4    const                                KEY
     Db                                    like(vApiErrDS)
      *----------------------------------------------------------------
     D vApiErrDs       ds
     D  vbytpv                       10i 0 inz(%size(vApiErrDs))                bytes provided
     D  vbytav                       10i 0 inz(0)                               bytes returned
     D  vmsgid                        7a                                        error msgid
     D  vresvd                        1a                                        reserved
     D  vrpldta                      50a                                        replacement data

     C                   eval      TwoPercent=%int((NbrOfRcds/100)*2)
     C
     C                   read      imtmpf
     C                   Dow       not %eof
     C                   exsr      srInProgress
     C                   read      imtmpf
     C                   Enddo

     C                   eval      *inLR = *on
      * ---------------------------------------------------------------------
     C     srInProgress  begsr
     C                   eval      RecordCnt = RecordCnt + 1
 1B  C                   if        %rem(RecordCnt:TwoPercent)=0
     C                   eval      InPrgVary=InPrgVary+'>'
     C                   eval      InProgressMsg=InPrgVary+ConstantPeriod
     C                   eval      PercentComp=PercentComp+2
      * Send status message
     C                   callp     QMHSNDPM(
     C                             'CPF9898':'QCPFMSG   *LIBL     ':
     C                             %char(PercentComp) + '% completed:  ' +
     C                             InProgressMsg :
     C                             65:'*STATUS':'*EXT': 1:'    ':
     C                             vApiErrDS)
 1E  C                   endif
     C                   endsr


您可將 File IMTMPF 改成您要處理的檔案再 Compile。


沒有留言: