Qualvin
Messages postés21Date d'inscriptionvendredi 3 mai 2002StatutMembreDernière intervention 5 avril 2012
-
27 mars 2012 à 22:09
Qualvin
Messages postés21Date d'inscriptionvendredi 3 mai 2002StatutMembreDerniè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.
Qualvin
Messages postés21Date d'inscriptionvendredi 3 mai 2002StatutMembreDerniè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.