Pokusao sam da stavim dva CGauge-a na formu koja ce da prate izvrsavanje dva inserta u bazu, evo koda, ali nesto ne stima,
uvek se odradi jedan pa drugi. Ima li neko ovakvih iskustava a spreman je da ih podeli sa drugima?
A wild-guess (jer odavno nisam koristio thread-ove u Builderu) :
Ti pokrecesh jedan thread, pa zatim drugi.
ALI, obe Execute() funkcije su "umotane" u Synchronise() blok - shto znachi da si ubacio celu funkciju u glavni VCL thread. Na taj nachin si onemogucio oba thread-a da se odvijaju istovremeno. Synchronize() bi trebao da se koristi samo za funkcije za koje nisi siguran da su thread-safe.
Prvo pitanje je - da li baza koju koristish podrzhava multi-threading. I drugo je pristup VCL komponentama.
Probaj da sinhronizujesh samo apdejt CGauge komponente, ostatak funkcije ostavi van thread-safe bloka.
Ako koristis:
Application->ProcessMessages();
samo zbog Update-ovanja CGauge, bolje probaj
CGauge->Update(); // mislim da bi trebalo da ima Update() metodu.
... jer je brze.
Takodje, u dugim petljama, bolje je
Application->ProcessMessages();
...pozivati svaki recimo 100-ti put.
if ( ( i % 100 ) == 0 )
Application->ProcessMessages();