Forum: PC-Programmierung VC++: Timerhandling / Zeiger auf Methoden


von Karlheinz Druschel (Gast)


Lesenswert?

Hi Leuts,
ich habe ein kleines Problem mit den Timern unter Windows.
Ich möchte mir, ähnlich einer SPS, einen Timer bauen, den ich mit einer
Zeitvorgabe starte (ca. 100 ms), und der nach Ablauf nichts anderes
macht als ein FALSE zurückzuliefern.
Mit der Funktionen SetTimer klappt das eigentlich fehlerfrei.
Ich starte den Timer im 10 ms Intervall und gebe ihm eine Funktion mit
die in diesem Intervall aufgerufen wird. Dort zähle ich einfach einen
Zähler hoch, der bei Erreichen des voreingestellen Wertes ein Flag auf
False setzt.
C++ like möchte ich das ganze nun in eine Klasse packen, demnach also
auch die Funktion die beim Auslösen des Timers aufgerufen wird. Aber
ich krieg irgendwie den Zeiger auf diese Methode nicht gebacken. Wie
macht man sowas ?



Greets
Karlheinz

von Heinz (Gast)


Lesenswert?

Das geht ungefähr so:

in der Funktion auf die du einen Zeiger haben willst,

deineKlasse.MemberFunktion(this);

this ist dabei der Zeiger auf die Funktion in der du der Aufruf machst

von Christoph _. (chris)


Lesenswert?

Du könntest bei SetTimer einen Zeiger auf das Objekt übergeben (dieser
void*-Parameter).

In der Timer-Behandlung castest du mittels reinterpret_cast<> wieder
auf den korrekten Zeigertyp und rufst wie gehabt mit -> die
member-Funktionen auf:

foo* bar = new foo; // objekt bar der Klasse foo
SetTimer(/* ... */, bar);
// delete bar nicht vergessen,
// wenn bar nicht mehr gebraucht wird

// In der Timer-Funktion mit void* param:
foo* bar = reinterpret_cast<bar*>(param);
bar->member_call();
// etc.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.