[BCB 6] TCriticalSection

0

Witojcie. Mam problem z użyciem w/w klasy w programie z kilkoma wątkami. Po prostu nie wiem gdzie (w głównym wątku? w każdym z osobna? globalnie? w klasie?) i jak użyć sekcji krytycznej w wątkach. :/

IMHO powinno to wyglądać np. tak:

  1. W wątku GŁÓWNYM tworzę globalny obiekt:
#include "SyncObjs.hpp"
TCriticalSection *CrSec;
CrSec = new TCriticalSection(); //to umieszczam przed wywolaniem wątku, np. w Button1Click(TObject*)    
  1. W utworzonym wątku POBOCZNYM w sekcji Execute() umieszczam np. taki kod:
for (int i = 0; i < 50000; i++)  
{
  	CrSec->Acquire();  	  
	Form1->Label1->Caption = i;  
	if (Terminated) Free();  	  
	CrSec->Release(); 
}    

Ale po uruchomieniu progam się wyp****a gdy dojdzie do linijki "CrSec->Acquire();"
Jak temu zaradzić? Co robię źle? Google i fora nie zawierają odpowiedzi na mój problem. :/

EDIT:
Próbowałem też użyć "CrSec->Enter" zamiast Acquire itp - efekt ten sam. Błąd pojawia się już w pierwszym wejściu do pętli (i = 0):

user image

0

Ale wywal sie od razu jak dojdzie czy moze dopiero za drugim razem no i jako blad wyrzuca.

0

Pusty wskaźnik w wątku pobocznym. [diabel]

0

Dzięki, pomogło. Mam nadzieję, że tak jest poprawnie (w niedzielę wejściówka :O ).
Pozdrawiam [browar]

BTW Synchronizacja wątków w WinAPI:

http://www.ii.uni.wroc.pl/~wzychla/ra2223/so2.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1