[ reikonija @ 12.11.2011. 19:42 ] @
Moje pitanje je :
Kako mogu povecati npr varijablu 'i' koja je integer i ponovo je korisiti u threadu , npr imam 2 thread-a , i pokrneem ih istovremeno i prvi koji zavrsi salje podatke glavnom vcl threadu npr. neki string , i kad zavrsi povecava varijablu 'i' i cita je ponovo u svom threadu ali samo jedan thread moze povecavati varijablu.

Tj.
Thread1.Start(0)
Thread2.Start(1)
i:=1
Thread1.Finished;
dodaj obradjenu vrednost;
povecaj i za 1
koristi i;
Thread1.Start(2);
Thread2.Finished;
dodaj obradjenu vrednost string npr.;
povecaj i za 1
koristi i;
Thread1.Start(3)

Nadam se je moje pitanje bilo razumljivo znaci zanima me kako da napravim globalnu varijabu za sve threadove alo koju u jednom trenutku moze citati i pisati samo jedan thread dok drugi cekaju dok on ne zavrsi.
Hvala
[ savkic @ 13.11.2011. 01:10 ] @
> Nadam se je moje pitanje bilo razumljivo znaci zanima me kako da napravim globalnu varijabu za sve threadove alo koju u jednom trenutku moze citati i pisati
> samo jedan thread dok drugi cekaju dok on ne zavrsi.

Ako misliš na threadsafe povećanje promenljive onda možeš koristiti InterlockedIncrement API funkciju. Ako moraš jedan segment koda koda sme koristiti samo jedan thrad onda koristi CriticalSection. Ako rad sa promenljivom mora biti ekskluzivan na nivou nekog zadatka u jednom threadu onda možeš koristiti Evente ili Mutexe. U SyncObjs unitu imaš nekoliko klasa koje ti mogu pomoći u radu sa WinApijem.