[archive] Threads

[Migrated content. Thread originally posted on 17 February 2005]

I'm just wondering if my code is a good way to handle threads.
The routines are working great, but I know one has to be carefull with threads.

PROGRAM-1 fills a grid with data after it has been sorted.
The user can click another heading of the grid wich calls the sort-routine again on other data.

It's my intention to give the user a message when the sort is taking too long (> 3 Secs).

If it's a good way of programming threads, maybe some other users can use the source as well.

Kind regards ;-)

PROGRAM-1 does the sort and fills the grid.

       FILL-GRID.
          PERFORM FILL00 THRU FILL99.
       FILL00.
          PERFORM THREAD "TIMING" HANDLE IN TIMING-HANDLE.

       * DO THE SORT AND FILL THE GRID

       * END OF SORT AND FILLING GRID.

       FILL88.
          SET END-THREAD TO TRUE.
          STOP THREAD TIMER-HANDLE.
          STOP THREAD MESSAGE-HANDLE.
       FILL99.

       TIMING.
           PERFORM TIMER00 THRU TIMER99.
       TIMER00.
           INITIALIZE DIFF-SEC SA-SEC1 SA-SEC2 THREAD-STATUS.
           ACCEPT WTIME FROM TIME.
           MOVE SEC OF WTIMER TO SA-SEC1.

           PERFORM UNTIL DIFF-SEC = 3
              ACCEPT WTIME FROM TIME
              MOVE SEC OF WTIMER  TO SA-SEC2
              SUBTRACT SA-SEC1 FROM SA-SEC2 GIVING DIFF-SEC
           END-PERFORM.

           IF DIFF-SEC = 3
           AND NOT END-THREAD
              MOVE 1            TO READ-MESS-NR(1)
              MOVE 2            TO READ-MESS-NR(2)
              CALL THREAD "MESSAGE" HANDLE MESSAGE-HANDLE
                   USING LNK.
       TIMER99.
 


MESSAGE is a separate program were messages are been displayed to the user if the grid hasn't been filled with data after 3 secs.

Maybe it would be better to make it a routine, instead of a seperate program ?

       Form1-Aft-Initdata.
           PERFORM BEGIN00 THRU BEGIN99.
       BEGIN00.
           RECEIVE THREAD-STATUS FROM ANY THREAD.
           IF END-THREAD
              SET EXIT-PUSHED TO TRUE
           ELSE
              GO TO BEGIN00
           END-IF.
       BEGIN99.