Probleme synchronize et semaphore
Salut , tout le monde , voila un problème étrange qui survient dans mon application.
En effet quand j'utilise le sémaphore la fonction synchronize ne produit aucun effet et n'affiche rien. Alors que si je commente toutes le lignes relatives au sémaphore , ça marche parfaitement.
Qu'est ce que j ai loupé ??
Code du thread Principal:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Semaphore_Bdechargement:=CreateSemaphore(nil,1,1,'Semaphore_Bdechargement');
Event_Bdechargement_init:=Tevent.create(nil,false,false,'Bdechargement_init');
//Construction du thread
barillet_dechargement:=TBarillet_dechargement.Create;
//on lance le thread
barillet_dechargement.Resume;
Waitforsingleobject(Semaphore_Bdechargement,infinite);
Event_Bdechargement_init.SetEvent;
Waitforsingleobject(Semaphore_Bdechargement,infinite);
ReleaseSemaphore(Semaphore_Bdechargement,1,nil); |
Code du thread secondaire:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
constructor TBarillet_dechargement.Create;
begin
FreeOnTerminate:=false;
threadterminated:=false;
inherited Create(true);
FEvent_Bdechargement_init:=Tevent.create(nil,False,False,'Bdechargement_init');
//Ouverture du sémaphore pour déclarer la fin d'utilisation de la ressource
FSemaphore_Bdechargement:=OpenSemaphore(SEMAPHORE_ALL_ACCESS,true,'Semaphore_Bdechargement');
end;
procedure Tbarillet_dechargement.Affiche_panel;
begin
Form_pp.panel1.caption:='salut';
end;
procedure Tbarillet_dechargement.Execute;
begin
while not(Threadterminated) do
begin
//on attend l'évenement de l'initialisation de la ressource
if FEvent_Bdechargement_init.WaitFor(0)=wrSignaled then
begin
synchronize(Affiche_panel);
//on libère le sémaphore pour signaler que la fin d'utilisation du barillet
ReleaseSemaphore(FSemaphore_Bdechargement,1,nil);
end;
end; |