Mes THREAD ont tous le même Handle/ThreadID

Résolu
Qualvin Messages postés 21 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 5 avril 2012 - 27 mars 2012 à 22:09
Qualvin Messages postés 21 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 5 avril 2012 - 5 avril 2012 à 16:33
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

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 avril 2012 à 15:14
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
3
Qualvin Messages postés 21 Date d'inscription vendredi 3 mai 2002 Statut Membre Dernière intervention 5 avril 2012
5 avril 2012 à 16:33
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
3
Rejoignez-nous