probleme de pointeur - C++ - Programmation
Marsh Posté le 07-04-2005 à 14:05:07
Quand tu arrives dans ta fonction m_pDialog est-il toujours NULL ?
Si c'est le cas, tu ne peux pas faire m_pDialog->Invalidate()
tu peux faire :
Code :
|
Marsh Posté le 07-04-2005 à 14:38:41
ouai il est tj nul
ouai mais t as solution ne sert a rien ici il ne fait jamais de invalidate
Marsh Posté le 07-04-2005 à 15:05:16
salut,
Il me semble que c'est le même topic que là, non ?
http://forum.hardware.fr/forum2.ph [...] subcat=386
Marsh Posté le 07-04-2005 à 15:22:17
ouai mais on mas pas rtepondu
Marsh Posté le 07-04-2005 à 15:47:45
tiens je t'ai trouvé ça : http://www.mvps.org/vcfaq/mfc/11.htm et le lien qu'il y a en bas de la page est aussi à voir. Pour mieux comprendre, utilise la msdn...
Marsh Posté le 07-04-2005 à 16:29:21
ok j'essaie
Marsh Posté le 07-04-2005 à 16:32:31
ouai mais pour le hwnd j'ai besoin d'un pointeur sur la fenetre d'affichage donc retour case depart
Marsh Posté le 07-04-2005 à 16:50:20
au lieu de faire de pParam un pointeur vers ta classe CHorloge, tu en fais un pointeur vers un hWnd...
Marsh Posté le 07-04-2005 à 16:53:03
pourquoi passé par pParam??? moiu j'ai tapé ca
Code :
|
Marsh Posté le 07-04-2005 à 16:58:24
aussi... du moment que ça marche c'est l'essentiel... Mais le fait de passer un pointeur vers un HWND t'empêche d'appeler une quelconque fonction membre ayant une incidence sur le thread de l'UI.
Marsh Posté le 07-04-2005 à 17:12:05
pourquoi un thread ?
tu crées un Timer qui va t'envoyer un message qui va te faire rafraichir ton bouzin.
Marsh Posté le 07-04-2005 à 17:25:26
IrmatDen a écrit : aussi... du moment que ça marche c'est l'essentiel... Mais le fait de passer un pointeur vers un HWND t'empêche d'appeler une quelconque fonction membre ayant une incidence sur le thread de l'UI. |
ouai mais le prob c'est que justement c'est mon pointeur qui plante!?!
Marsh Posté le 07-04-2005 à 17:26:13
dans ce cas la je fais mon horloge aussi dans un timer c'est pas une solution
Marsh Posté le 07-04-2005 à 17:31:23
dreamkiller a écrit : ouai mais le prob c'est que justement c'est mon pointeur qui plante!?! |
D'après ton code, non c'est pas ton pointeur qui plante mais l'utilisation que tu en fais !!
Et le coup du timer, pourquoi c'est pas une solution ?
Marsh Posté le 07-04-2005 à 17:33:53
si c'est LA solution.
tu as un évenement qui t'arrives périodiquement quand tu dois actualiser quelque chose.
ce que tu fais est ultra-classique y'a pas besoin de thread avec un sleep dedans pour actualiser une horloge dans une interface.
Marsh Posté le 07-04-2005 à 17:34:50
je persiste a croire que c'est mon pointeur
pObject->m_pDialog->mClock.GetHeure(); cette ligne plante a l'execution (mClock donne membre de la classe qui contient mon thread)
Marsh Posté le 07-04-2005 à 17:37:37
si ton pointeur est NULL oui y'a déjà ça.
mais après, au moment de l'appel à invalidate() es-tu que tout ce qui se passe soit thread-safe ?
Marsh Posté le 07-04-2005 à 17:39:52
sinon ton "CPCControleDlg *m_pDialog", on est d'accord qu'il est bien dans ta classe CHologe, et que tu n'en as pas d'autres ailleurs.
poste le code de la création du thread, voir comment tu initialises le CHorloge passé en paramètre au thread.
Marsh Posté le 07-04-2005 à 17:43:29
tennez pas compte des commentaires c'est des essai
.cpp
Code :
|
.h
Code :
|
Marsh Posté le 07-04-2005 à 17:50:05
alors déjà:
Code :
|
quand AfxBeginThread() crée le thread, si il donne tout de suite un timeslice, le thread va commencer à s'éxécuter avec des données CHorloge non initialisés, et le pObject->m_pDialog->mClock.GetHeure() se fera avec un "m_pDialog" à pseudo-rien, ni à NULL ni à autre chose de désiré.
ie faire plustôt:
Code :
|
surtout le m_pDialog qui doit être initialisé à autre chose que NULL, sinon kaboum....
Marsh Posté le 07-04-2005 à 17:51:39
oui mais l'initialisé a quoi
Marsh Posté le 07-04-2005 à 17:56:35
dans le doute tu peux aussi créer ton thread avec un:
AfxBeginThread(ThreadHorloge,this,THREAD_PRIORITY_LOWEST,0,CREATE_SUSPENDED);
et faire un ResumeThread() pour lancer le thread un fois que tu as terminé tes initialisations.
comme spécifié à: http://msdn.microsoft.com/library/ [...] nct_18.asp
Marsh Posté le 07-04-2005 à 17:58:36
ReplyMarsh Posté le 07-04-2005 à 17:59:51
mais comme je te dis, l'approche du thread est une mauvaise approche pour ce que tu veux faire.
tu crées un Timer, tu mappes le message du timer sur ta fonction qui va bien et puis voilà...
Marsh Posté le 07-04-2005 à 23:17:01
et comment on fiat un timer (et oui j'suis tributaire de mes cours d'info et ca c'est pas dans mes cours)
Marsh Posté le 08-04-2005 à 08:22:30
dreamkiller a écrit : et comment on fiat un timer |
Bah tu vas là: http://www.google.com/microsoft
Et tu tapes "timer". Faut pas prendre le 1er choix (qui est en .NET), mais le 2ème. C'est quand même pas compliqué, nan ? (comme d'hab, y a même un exemple dedans, et la doc est très lisible)
Ou sinon, un bête google sur "msdn timer" donne ça en première page:
http://www.codeproject.com/system/timers_intro.asp
dreamkiller a écrit : (et oui j'suis tributaire de mes cours d'info et ca c'est pas dans mes cours) |
Pas du tout. Tu crois qu'on connais tous les APIs par coeur, ou qu'on garde jalousement nos polys de cours 10 ans après l'obtention du diplôme, même pour coder des trucs abscons ?
Bah nan. Pour être efficace dans la vie, faut savoir chercher (c'est aussi un truc à apprendre: comment trouver la bonne info de la bonne manière). En l'occurence, tu es gâté, la programmation sous Windows est hyper bien documentée sur la MSDN, et on trouve un milliard d'exemples sur le net. Donc, Google est ton ami.
Marsh Posté le 08-04-2005 à 09:00:30
[ouai j'ai realisé que j'avais dit une connerie dsl merci quand memem
Marsh Posté le 08-04-2005 à 09:50:14
ouai ca marche
merci beaucoup la solution timer en faite n'etait pas une mauvaise idee
Marsh Posté le 07-04-2005 à 13:42:22
Salut a tous bon voila j'ai un probleme de pointeur apparament il est mal initialisé et me plante dans les pates des que je m'en sert
declaration du pointeur
initialisation
---------------
debian sib sur asus a6va peut etre prochainement un freebsd