Confirm is inrteressant I have added to my blog http://harbourlanguage.blogspot.com/search/label/MultiThread
2010/4/6 rafa <r...@tesipro.com>: > I believe this example is interesant. > > Regards > Rafa Carmona > > /* > Example multiThreads index. > One thread by table , and one thread by index. > 2010 Rafa Carmona > > Thread Main > |---------> Thhread child table for test.dbf > | |----> Thread child index fname > | | > | |----->Thread child index fcode > | > |---------> Thhread child table for test2.dbf > |----->Thread child index fname2 > > > */ > #include "hbthread.ch" > > proc Main( uCreate ) > Local nSeconds > Local aFiles := { "test", "test2" } // Arrays files dbf > Local aNtx := { { "fname", "fcode" },; // files index for test > { "fName2" } } // files index for test2 > Local aExpr := { { "name", "code" },; > { "dtos(fecha)+str(code)" } } // Expresions > Local cDbf > > if empty( lCreate ) > lCreate := "0" > endif > > setmode( 25,80 ) > cls > > if uCreate = "1" > ? "Create test.dbf and test2.dbf" > dbCreate("test",{ {"name","C",1,0 },{"code","N",7,0 } } ) > use test > while lastRec() < 1000000 > dbAppend() > field->name := chr( recno() ) > field->code := recno() > enddo > close > dbCreate("test2",{ {"fecha","D",8,0 },{"code","N",7,0 } } ) > use test2 > while lastRec() < 1000000 > dbAppend() > field->fecha := date() + recno() > field->code := recno() > enddo > close > endif > > cls > // Threads > nSeconds := Seconds() > for each cDbf in aFiles > ? "Process.: " + cDbf > hb_threadStart( @aCreateIndexe(), cDbf, aNtx[ cDbf:__enumindex ], > aExpr[ cDbf:__enumindex ], cDbf:__enumindex ) > next > > ? "Wait for threads ...." > hb_threadWaitForAll() > > ? hb_valTostr( Seconds() - nSeconds ) > > ? "finish" > > return > > function aCreateIndexe( cFile, aNtx, aExpr, nPosDbf ) > Local nContador := 1 > Local cFileNtx, cExpr > Local nLong := Len( aNtx ) > Local aThreads := {} > Local cAlias > > use ( cFile ) > cAlias := alias() > hb_dbDetach( cAlias ) // Libero el alias > > for each cFileNtx in aNtx > cExpr := aExpr[ cFileNtx:__enumindex ] > nContador := 1 > nPos := cFileNtx:__enumindex > aadd( aThreads, hb_threadStart( @crea(), cAlias,cExpr, > cFileNtx, nPos, nPosDbf ) ) > next > > aEval( aThreads, { |x| hb_threadJoin( x ) } ) // wait threads childs > hb_dbRequest( cAlias, , , .T.) // Restaura el alias > close > > RETURN NIL > > proc crea( cAlias, cExpr, cFileNtx, nPos, nPosDbf ) > Local nContador := 1 > > hb_dbRequest( cAlias, , , .T.) // Restaura el alias > > INDEX ON &(cExpr) TO &(cFileNtx) ; > EVAL {|| hb_dispOutAt( nPosDbf, iif( nPos = 1, 20, 40 ), > alltrim( hb_valtostr( nContador) ), "GR+/N" ), nContador += INT( > LASTREC() / 100 ) , .T. } ; > EVERY INT( LASTREC() / 100 ) > > hb_dbDetach( cAlias ) // Libera el alias > > > return > > _______________________________________________ > Harbour mailing list (attachment size limit: 40KB) > Harbour@harbour-project.org > http://lists.harbour-project.org/mailman/listinfo/harbour > -- Massimo Belgrano Iscritto all'albo dei CTU presso il Tribunale di Novara per materia Informatica Delta Informatica S.r.l. (http://www.deltain.it/) (+39 0321 455962) Analisi e sviluppo software per Lan e Web - Consulenza informatica - Formazione _______________________________________________ Harbour mailing list (attachment size limit: 40KB) Harbour@harbour-project.org http://lists.harbour-project.org/mailman/listinfo/harbour