miércoles, 3 de agosto de 2016

Threads. Harbour & xBase++

Mirando más ejemplos en Harbour, he visto como Przemyslaw, a creado una clase Thread,
que la podéis localizar en /contrib/hbxpp/tthreadx.prg , para manejar los threads igual que
xBase++

En Internet, he localizado un documento en inglés,MultiThreading xBase++

He realizado un simple ejemplo del documento, y funciona perfectamente en Harbour,
para compilar hbmk2 test_xbase.prg -mt hbxpp.hbc
 

#include "hbthread.ch"

FUNCTION Main()
     LOCAL oThread, lThread1Active := .f., lThread2Active := .f.
    
     oThread := Thread():new()
     Sleep(1)
     oThread:start({||ThreadLoop( @lThread1Active) } )

     oThread := Thread():new()
     Sleep(1)
     oThread:start( {||ThreadLoop( @lThread2Active ) } )

     DO WHILE lThread1Active .OR. lThread2Active
       Sleep(1)
     ENDDO
     WAIT

RETURN nil

STATIC FUNCTION ThreadLoop( lActive )
   LOCAL i
   lActive := .t.

   FOR i := 1 TO 5
    ? 'I am running in thread ' + Alltrim(Str(hb_ThreadId()))
    hb_idleSleep(1.5)
   NEXT

   lActive := .f.
  
RETURN nil