Mes THREAD ont tous le même Handle/ThreadID [Résolu]

Signaler
Messages postés
21
Date d'inscription
vendredi 3 mai 2002
Statut
Membre
Dernière intervention
5 avril 2012
-
Messages postés
21
Date d'inscription
vendredi 3 mai 2002
Statut
Membre
Dernière intervention
5 avril 2012
-
J'ai un code qui ressemble à ceci, qui roule dans une boucle. (Je créé 4 thread comparativement à 2 dans l'exemple)

if not assigned(Process1) then
begin
Process1 := TProcessThread.Create(True);
Process1.Resume;
Sleep(1000);
end
else
begin
if (Process1.Terminated) then
Process1 := nil;
end;

if not assigned(Process2) then
begin
Process2 := TProcessThread.Create(True);

Process2.Resume;
Sleep(1000);
end
else
begin
if (Process2.Terminated) then
Process2 := nil;
end;

La classe TProcessThread est un TThread. Cette application fonctionne super bien, mais je viens de découvrir que tous mes objets ont le même ThreadId et le même Handle. Chaque fois que je créé le suivant, tous les objets changent de handle pour prendre le nouveau.

Conséquemment, lorsque je fais un CLOSEHANDLE(), seul le dernier semble se libérer, ce qui fait que j'accumule des handles sans cesse puisque ça roule en boucle.

Si jamais quelqu'un sait ce qui cloche dans la création de mes objets TProcessThread, votre avis serait grandement appréciée.

p.s. Le constructeur de ma classe

constructor Create(CreateSuspended: Boolean); reintroduce; virtual;

constructor TPcxExecProcessThread.Create(CreateSuspended: Boolean);
begin
FreeOnTerminate := True;
FIsRunning := True;

inherited Create( CreateSuspended );
end;



Qualvin

2 réponses

Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour

Etant donné que tes threads sont créés en "FreeonTerminate", tu ne devrais donc pas utiliser un "closehandle" pour les libérer !

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
21
Date d'inscription
vendredi 3 mai 2002
Statut
Membre
Dernière intervention
5 avril 2012

En théorie c'est ce que je croyais aussi, mais la réalité fait en sorte que je cumulais des handles de manière ininterrompue.

J'ai adopté la solution suivante: je fais la création du thread et ensuite, je fais un CloseHandle(thread.handle) immédiatement. Fermer un handle n'empêche pas l'exécution normale du thread, ça nous retire juste l'option de pouvoir y référer plus tard.

Merci!

Qualvin