* *
% remove brandings and homepage [1] from copyright header. Pass 1 - using script.
[1] nobody has access to it anymore AFAIK - and it's also just
a redirect since long
! update url in copyright header
; this should make the diff between 3.4 and 3.2 easier to manage
64 lines
1.6 KiB
Plaintext
64 lines
1.6 KiB
Plaintext
/*
|
|
* demonstration/test code for using the same work area in different
|
|
* threads. Please note that this program also works when compiled
|
|
* without thread support.
|
|
*
|
|
* Copyright 2008 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
|
|
*
|
|
*/
|
|
|
|
STATIC s_mainThreadID
|
|
|
|
proc main()
|
|
field F1
|
|
local thID, bResult
|
|
|
|
s_mainThreadID := hb_threadSelf()
|
|
/* create table */
|
|
dbCreate("_tst", { { "F1", "C", 1, 0 } } )
|
|
use _tst
|
|
while lastRec() < 10000
|
|
dbAppend()
|
|
F1 := chr( recno() )
|
|
enddo
|
|
|
|
? "main thread ID:", s_mainThreadID
|
|
thID := hb_threadStart( @thFunc() )
|
|
? "current thread ID:", thID
|
|
? "work area in use, used() =>", used(), alias()
|
|
WAIT "Press a key to detach work area"
|
|
hb_dbDetach( , {|| countRecords( {|| F1 == "A" } ) } )
|
|
? "work area detached, used() =>", used(), alias()
|
|
? "we will make some other things now..."
|
|
hb_idleSleep( 1 )
|
|
? "let's check the result"
|
|
? "request for work area"
|
|
hb_dbRequest( , , @bResult, .T. )
|
|
? "work area atached, used() =>", used(), alias()
|
|
? "query result:", eval( bResult )
|
|
close
|
|
dbDrop("_tst")
|
|
return
|
|
|
|
proc thFunc()
|
|
local bQuery, xResult
|
|
|
|
if hb_dbRequest( , , @bQuery, .T. )
|
|
xResult := Eval( bQuery )
|
|
hb_dbDetach( , {|| xResult } )
|
|
endif
|
|
return
|
|
|
|
static func countRecords( bFor )
|
|
local nCount := 0
|
|
dbGoTop()
|
|
while ! eof()
|
|
if eval( bFor )
|
|
nCount ++
|
|
endif
|
|
dbSkip()
|
|
enddo
|
|
? "!!! JOB DONE !!!" + iif( hb_threadSelf() == s_mainThreadID, ;
|
|
" (by main thread)", " (by child thread)" )
|
|
return nCount
|