Files
harbour-core/tests/mt/mttest06.prg
vszakats 306fdd0446 2013-03-15 18:27 UTC+0100 Viktor Szakats (harbour syenar.net)
* package/*
  * src/compiler/harbour.y
  * src/compiler/harbour.yyc
  * src/macro/macro.y
  * src/macro/macro.yyc
  * src/pp/hbpp.1
  * tests/*/*
  * utils/*
    * stripped svn header manually

  * tests/hbdocext.hb
  * tests/lang2po.hb
  * tests/big5_gen.prg
  * tests/uc16_gen.prg
    * do not add svn ids to generated sources

  + tests/stripsvn.hb
    + added script to strip svn header from sources
2013-03-15 18:30:08 +01:00

46 lines
1009 B
Plaintext

/*
* Harbour Project source code:
* demonstration/test code for using memvars in threads
*
* Copyright 2008 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
* www - http://harbour-project.org
*
*/
#define N_THREADS 5
#define N_COUNT 1000000
#define N_INIT 100
memvar m_var
proc main()
local aThreads := {}, i, nSum
? Version()
private m_var := N_INIT * 25
? "Starting threads: "
for i :=1 to N_THREADS
aadd( aThreads, hb_threadStart( @thFunc() ) )
?? "<" + hb_ntos( i ) + ">"
next
? "Waiting for threads..."
nSum := 0
aEval( aThreads, {| x | hb_threadJoin( x, @i ), nSum += i } )
? "Threads joined"
? "Sum of results:", nSum
? " should be:", N_THREADS * ( N_INIT + N_COUNT ), ;
iif( nSum == N_THREADS * ( N_INIT + N_COUNT ), "OK", "ERROR" )
return
static func thFunc()
private m_var := N_INIT - 10
return do()
static func do()
local i
private m_var := m_var + 10
for i := 1 to N_COUNT
++m_var
next
return m_var