[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]

    {
    From: omipd@aztec.co.za (Ahmed Bhamjee)

    This is the best way to do bulk processing in Windows. When the window is
    created, you set a timer for PROCESSDELAY milliseconds.
    }
      PROCEDURE caProcessFile.SetupWindow;
      BEGIN
        INHERITED SetupWindow;
        fCurrent := 0;
        SetTimer(HWindow,tm_ProcessRecord,PROCESSDELAY,NIL);
      END;
    {
    When the timer message arrives, post a user message to the same window do
    perform the required task (eg stepping through a database)
    }
      PROCEDURE caProcessFile.WMTimer(VAR Msg:TMessage);
      BEGIN
        KillTimer(HWindow,tm_ProcessRecord);
        PostMessage(HWindow,um_ProcessRecord,0,0);
      END;
    {
    When the message arrives, decide firstly how many records (iterations) you
    wish to perform before releasing "time" to Windows.
    }
      PROCEDURE caProcessFile.ProcessRecord(VAR Msg:TMessage);
      BEGIN
        SetExit(FALSE);
        WHILE NOT fpoDatabase^.EOF DO
          BEGIN
            fErrorCode := 0;
            DoSomething;
            IF fErrorCode > 0 THEN
              BEGIN
                CloseYourSelf(fErrorCode);
                EXIT;
              END;
            fpoDatabase^.Skip(1);
            INC(fCurrent);
    {
    BLOCKSIZE is the number of iterations.
    }
            IF (fCurrent MOD BLOCKSIZE)=0 THEN
             BEGIN
               SetExit(TRUE);
    {
    Set a timer back to this method.
    }
               SetTimer(HWindow,tm_ProcessRecord,PROCESSDELAY,NIL);
               EXIT;
             END;
          END;
        EndProcessing;
      END;

      PROCEDURE caProcessFile.EndProcessing;
      BEGIN
        KillTimer(HWindow,tm_ProcessRecord);
        CloseYourSelf;
      END;

[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]