Bon alors je vais être un peu plus précis. j'utilise un thread tserver qui crée un thread tclient à chaques nouvelles connections par contre dans le server au moment de sa creation j'utilise un semaphore exemple :
constructor tserver_thread.create(Port:Word;BindTo:string);
begin
freeonterminate:=true;
SemaphoreThreads := createSemaphore(nil,1,1,'');
semaphorelistwork :=createsemaphore(nil,1,1,'MYLISTWORK');
inherited create (false);
//apres c blablabla création du serveur on ouvre le port and co
end;
dans l'unité client au niveau de tclient.execute je reprends le semaphore messagetosend.
procedure TUser.Execute;
k,waitresult:integer;
begin
// blablabla on reçoit une instruction de la part d'un client
// on attend que le semaphore se libere pour executer une instruction ares l'autre
k:=0;
WaitResult := WaitForSingleObject(moteur.SemaphoreListWork, 0);
while waitresult<>wait_object_0 do
begin
k:=k+1;
end;
hbwait_ms(k); // là j'attends k milliseconds
end;
là c'est le crash il semble que le sémaphore semaphorelistwork n'attends pas d'avoir terminé une instruction pour en reprendre une autre .... personne à une idée ?
Au secours !!!!!!!!!