begin process at 2012 02 11 03:11:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Mémoire

 > 

Liberation d'un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Liberation d'un thread

samedi 1 septembre 2007 à 12:15:09 | Liberation d'un thread

OcHre

Juste une question concernant la libération d'un thread créé depuis ma fiche principale. Si je met la propriété FreeOnTerminate à True (donc je n'appelle pas Thread.Free depuis ma fiche principale) et que l'utilisateur du programme le ferme pendant que le thread s'éxecute, celui-ci va se ballader en mémoire jusqu'au prochain reboot ou il va se libérer?

Rions un peu en attendant la mort.

samedi 1 septembre 2007 à 14:03:03 | Re : Liberation d'un thread

Caribensila

Membre Club

Salut,

   MonThread.FreeOnTerminate := true;

ne te dispense pas de :

procedure TMainForm.FormDestroy(Sender: TObject);
begin
    if MonThread<>nil then MonThread.Free;
end;

samedi 1 septembre 2007 à 14:16:12 | Re : Liberation d'un thread

Caribensila

Membre Club
...Par contre, je me demande, dans le cas où on ne libère pas le Thread dans le Destroy de la fiche et si on ferme l'Application, si le Thread se libérera quand même quand il aura terminé sa tâche...   
samedi 1 septembre 2007 à 15:37:21 | Re : Liberation d'un thread

Delphiprog

Administrateur CodeS-SourceS
Il est préférable de détruire un thread secondaire qui errerait seul dans les ténèbres de la machine.
En effet, si le thread secondaire essaie de se synchroniser avec le thread principal alors que ce dernier a pris la fuite, ça mène tout droit à une violation d'accès à coup sûr.

Et s'il n'a pas besoin d'une synchronisation, alors on peut effectivement se demander ce qu'il devient. Voilà une question qu'elle est intéressante

May Delphi be with you !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
samedi 1 septembre 2007 à 15:37:48 | Re : Liberation d'un thread

OcHre

Salut,
j'avais en fait testé avec la meme methode mais dans la propriété OnClose de ma form sauf que cela m'amenait toujours à un message d'erreur et je viens d'essayer avec OnDestroy idem... J'imagine donc que les thread est effectivement bien libéré.
Merci pour ta réponse.

Rions un peu en attendant la mort.

samedi 1 septembre 2007 à 15:43:17 | Re : Liberation d'un thread

OcHre

Oups, je n'avais pas vu le post de Delphiprog.
Le thread devrait donc tester l'existence de la fiche et, si elle n'est plus, se terminer?

Rions un peu en attendant la mort.

samedi 1 septembre 2007 à 15:59:56 | Re : Liberation d'un thread

Caribensila

Membre Club

@ Delphiprog

Dans le cas d'un Thread secondaire non synchronisé, et en cas de fermeture de l'Application, ce Thread ne deviendrait-il pas tout simplement un processus (process) comme un autre?

dimanche 2 septembre 2007 à 09:51:08 | Re : Liberation d'un thread

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Salut les Delphistes,

je n'entends rien à votre langage mais comme je suis tombé sur ce post par hasard...

Un processus (l'enveloppe) est créé quand le lancement d'un thread primaire réussit et que le bloc mémoire est suffisant.
Windows garantit la destruction de tout thread secondaire s'exécutant dans l'espace processus quand le thread primaire retourne, par exemple et le plus courant suite à un retour 0 de GetMessage menant au ExitProcess.
Ceci pour dire qu'un thread balladeur orphelin n'a aucune chance d'exister.

ciao...
BruNews, MVP VC++
dimanche 2 septembre 2007 à 10:45:56 | Re : Liberation d'un thread

OcHre

Merci pour ces explications qui répondent parfaitement à ma question initiale.

Rions un peu en attendant la mort.

dimanche 2 septembre 2007 à 14:51:06 | Re : Liberation d'un thread

Caribensila

Membre Club

... Après quelques tests.

Effectivement, il n'y a jamais de Thread orphelin. Et comme l'a fait remarquer très justement BruNews, il semble bien que Windows se charge de la destruction du Thread en cas de fermeture anticipée de l'Application sans précaution (destruction qui ressemble d'ailleurs à un crash).



Cependant,
procedure TForm1.FormDestroy(Sender: TObject);
begin
   
if Thread<>nil then Thread.Free;
end;
garantie que le Thread terminera sa tâche en douceur en cas fermeture anticipée (synchro ou pas). L'application attendant la fin du Thread pour se fermer.
"freeOnTerminate := true;" ne semblant par contre n'avoir aucun effet dans ce cas.



Cette discussion est classée dans : thread, principale, fiche, liberation


Répondre à ce message

Sujets en rapport avec ce message

Frame et thread [ par stailer ] Salut tout le monde !J'ai un problème avec les threads et j'aurai besoin d'une explication :Si je lance un thread avec une fonction sur une fiche il y Programme avec identification utilisateur [ par orelien ] Bonjour,J'ai créé une application qui demande une identification par un mot de passe. Le programme est alors lancé sur la fiche "mot de passe" et une Utiliser fiche externe [ par kalerzz ] Bonjour tout le monde, Voila alors en fait je souhaiterais savoir comment utiliser des fonctions dans ma fiche principale qui ont été déclarées dans changer de fiche principale [ par vrachid ] bj a tousvoila j'ai crée une application dont il y a 4 fiche la première fiche qui est la principale est un formulaire de renseignement en lecomplétan Aligner une fiche par rapport à un TEDit [ par codial ] Bonjour,j'ai une fiche principale avec un TEDit et je cherche à aligner une autre fiche (Une liste à de sélection de produits) au dessus juste au dess TcomPort & Thread [ par ARCANELEC ] Bonsoir à tous ! Je suis en train de faire une appli qui à besoin de scruter des ports Com, J’ai donc pensé à Tcomport, mais le problème c’est que l fiche non MDI, qu'est-ce que c'est? [ par arno15 ] Bonjour.J'ai un problème de création de form. J'ai une form principale qui est de style 'fsMDIForm'.Je souhaite créé une autre form qui doit prendre p Application MDI et sauvegarde [ par christophedlr ] Bonjour à tous,Dans mon programme, j'utilise ls système d'application MDI.Mon problème, c'est que la fiche MDI enfant est créer dynamiquement(créer ju TServerSocket : Limiter la création de Thread ssi adresse IP valide [ par donrolando ] Bonjour, Je cherche à savoir comment on peux empécher le composant TServerSocket en mode threadblocking de crée un thread TserverClientThread, par exe Threads et events [ par Danonne ] Salut a tous.Après de nombreuses recherches sur divers sites et forums, je n'ai pas réussi à trouver une réponse (claire et précise) à ma question exi


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,324 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales