mikrocontroller.net

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


Autor: Karlheinz Druschel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.