Frage zu SetTimer
-
Ich habe ein Programm, dass in einer eigenen Klasse läuft. Drumherum läuft eine MFC-App, die ein Dialog-Fenster hat, dass als GUI für mein Programm dienen soll. Ich möchte nun in meiner Klasse eine Funktion implementieren, die nach Ablauf eines Timers regelmäßig aufgerufen wird, aber keine richtige callback ist, da meine Klasse kein Fenster ist und wirklich ausschließlich auf diesen Timer reagieren soll.
Also habe ich meiner Klasse einen Zeiger auf das zu ihr gehörende Dialogfenster (CWnd
spendiert und versucht über diesen Zeiger, dem Dialogfenster einen Timer unterzujubeln, der immer nach Ablauf eine Memberfunktion meiner Klasse anspringt.
Ich hab mir nu inzwischen mehrere Stunden den Kopf dran zerbrochen und mich schwer getan, im MSDN was passendes zu finden. Möglicherweise ist mein Problem zu speziell oder ich setze völlig falsch an.
Also dass Memberfunctions nicht alls callback fungieren können ist mir klar, aber auch der Versuch mit einer statischen Funktion scheiterte. Ich habs einfach nicht hinbekommen den richtigen typ zu finden, in den ich konvertieren muss, oder habs wie gesagt, einfach völlig missverstanden wie's funktioniert.hat jemand nen tip für mich, wo ich da ansetzen sollte? ich glaube mir fehlt da "nur" etwas hintergrundwissen.
notfalls wäre mir auch geholfen, wenn mir jemand verrät, wie ich das hWnd einer CWnd-Instanz bekomme. Dann könnte ich das Problem fürs erste umgehen, glaub ich.
Oder kann man sonst irgendwie Windows-Timer setzen, die nicht zu einem Fenster gehören und nicht WM_TIMER auslösen, sondern gleich eine bestimmte (member-)funktion anspringen?wär echt super, wenn jemand nen tip hat. ich werd hier langsam echt weich

gruß & danke
-
das gleihe Problem hatte ich auch .. wollte einfach nur eine Klasse haben doe unsichbar im Progamm quassie arbeitet und einen Timer hat.. aber es können leider nur Fenster- klassen einen timer haben...
Du könntest höchsten das mit nem Thread machen ,der nen Timer simuliiert.. ist vll. bischen umständlich und blöd!!
Was möchstest du denn genau machen??
-
Was ich dazu beitragen könnte ist, sieh dir mal SetWaitableTimer und WaitForSingleObject an, damit kannst du dir einen Timer bauen, wenn du das alles in einen thread verpackst.
nur so als vorschlag.
gruß
-
okay werd ich mir heut abend mal genauer anschauen. danke für den tip.
aber interessieren würde mich trotzdem noch, ob und wie man das hWnd, also das window handle von einem fenster per mfc rausbekommen kann. dann kann ich windows vielleicht austricksen indem ich die normale winapi-funktion settimer benutze und einfach eine statische memberfunktion aufrufen lasse. vielleicht...
um das ganze in nen eigenen thread zu packen ist mir die sache eigentlich zu "klein". das wäre wie mit kanonen auf spatzen schießen. oder ist das so üblich, dass in der mfc-programmierung alles seinen eigenen thread hat? es ist, wie gesagt, ein kleines programm und kein kunstwerk.
gruß & danke
-
ein CWnd hat ein public Attribut m_hWnd und eine Methode GetSafeHwnd() worüber Du das Handle des Fensters bekommst.
-
Also Dein gedanke sollte eigentlich Funktionieren. D.h in einer Fensterklasse den Timer unterbringen und in der WM_TIMER Funktion eine Funktion Deiner No-Fensterklasse aufrufen. Da gibts mehrere Lösungsansätze entweder Du hast einen Zeiger auf die No-Wnd Klasse oder Du legst eine statische Funktion an, in der können aber nur satische Klassenmebers bearbeitest werden.
gruss
Marcus