Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008
-
3 sept. 2008 à 18:52
bnnesma
Messages postés1Date d'inscriptionmercredi 18 mars 2009StatutMembreDernière intervention29 mars 2009
-
29 mars 2009 à 17:01
Bonjours, je remarquer une chose qui me dérange. J'ai creer un thread (avec class(TThread) ). Je met a l'interieur de ce thread un TTimer. Lorsque je creer mon thread a partir d'une Form, tout va bien.
Mais mon problème apparait lorsque je creer mon thread a partir d'un autre thread, la tout a l'air de ce passez bien (la methode execute tourne en bloucle (while not(Terminated)) mais contrairement a la première situation l'evenement OnTimer de mon Timer n'est jamais appellé.
Que pensez vous de mon problème? existe-t-il une solution? ou doit-je contourner le problème en creant un evenement dans le premier thread qui s'executerai sur ma form qui lancerai le deuxieme thread.
PS: Contourner le problème marche mais ma curiosité me pousse a essaye de comprendre plus profondement mon pb.
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 22:46
Voila, Après cet introspection a l'interieur de moi meme (pléonasme) je conclue que des fois au lieu de chercher soi-même faut faire cherchez GOOGLE lol.
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 19:15
Precision: Pour la creation de mon Timer je fait TTimer.create(nil);
sa vient peut etre de nil mais je ne sait pas quoi mettre d'autre, self ne marche pas.
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 20:02
Et bien continuons ce monologue:
Je me heurte a un nouveau problème!!!
Comment faire l'équivalent d'un synchronize quand on a creer le premier thread avec "CreateRemoteThread". (Voir la source de Eguevel)
Je m'explique, cette fois j'injecte une dll (donc je creer un thread ds un autre processus) et je me heurte au meme problème que celui du premier post si je creer un nouveau thread dedans. Sauf que pour le regler je n'ai plus la methode synchronize.
Existe-t-il sychronize avec comme parametre l'id du thread? quels peuvent etre les solution? merci de votre aide ; )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 21:52
Bizarre je doit pas creer de nouveau thread en fait avec CreateRemoteThread car si j'affiche un showmessage il fige l'application et que GetCurrentThreadID et MainThreadID sont egaux.
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 21:58
Erreur vient de synchronize: j'apelle syncrhonize depuis mon thread mais la procedure qui doit etre syncrhonizer ne se lance jamais. Delphi doit installer quelque chose dans le thread principal pour l'utilisation de synchronize qui n'est pas installer qd on inject une dll avec createremotethread.
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 22:09
Encore un probleme!
Qd je creer mon premier thread j'ai les meme symptome qu'au debut.
Donc je reExplique: J'injecte une dll dans un processus d'ou je creer un thread avec un TTimer dedans helas l'evenement onTimer n'est jamais appeler. Je n'est pas ce pb si je creer mon thread a partir d'une form.
Apparament ce pb apparait lorsque je creer un thread a partir d'un thread qui n'est pas le thread principal. Mais si c'est le thread principal d'un autre processus (injection dll) le pb revient.
Merci de votre aide (hesiter pas a me couper ds mon monologue lol)
Kevinvin
Messages postés11Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention 5 septembre 2008 3 sept. 2008 à 22:23
J'ai observer le fonctionnement d'un TTimer, il creer une fenetre invisible de facon a pouvoir recuperer des message par la fonction adresse a l'handle de sa pseudo fenetre "procedure WndProc(var Msg: TMessage);"