ActivationTimer



  • Hallo,

    kennt Sie jemand mit dem ActivationTimer aus?
    http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5783/

    Habe es wie unter Usage beschrieben implementiert. Hier mein Code:

    void AuslastungFrm::datenaustausch()
    {
          ActivationTimer actTimer;
          actTimer.AddTask(60000, AuslastungFrm::verbinden);
    }
    

    oder auch nur so

    void AuslastungFrm::datenaustausch()
    {
         ActivationTimer actTimer;
         actTimer.AddTask(60000, verbinden);
    }
    

    Es kommt immer dieser Fehler:
    C:\Dev-Cpp\auslastung\AuslastungFrm.cpp In member function void AuslastungFrm::datenaustausch()': 96 C:\\Dev-Cpp\\auslastung\\AuslastungFrm.cpp no matching function for call toActivationTimer::AddTask(int, <unknown type>)'
    note C:\Dev-Cpp\auslastung\ActivationTimer.h:139 candidates are: int ActivationTimer::AddTask(long unsigned int, void*, void*)
    C:\Dev-Cpp\auslastung\Makefile.win [Build Error] [AuslastungFrm.obj] Error 1

    Hat irgendwer eine Idee woran das liegt?

    Danke & Gruß
    Fabian



  • oder gehört das eher ins WinAPI Forum...
    wenn ja bitte verschieben!

    Danke & Gruß



  • Die Fehlermeldung sagt aus, daß du AddTask mit falschen Parametern aufrufst...

    'AuslastungFrm::verbinden' mußt du als statische Methode der Klasse definieren und Aufruf dann mit:

    void AuslastungFrm::datenaustausch() 
    { 
          ActivationTimer actTimer; 
          actTimer.AddTask(60000, &AuslastungFrm::verbinden); 
    }
    


  • Danke erstmal!

    jetzt gibts aber einen neuen Fehler!

    C:\Dev-Cpp\auslastung\AuslastungFrm.cpp In member function void AuslastungFrm::datenaustausch()': 96 C:\\Dev-Cpp\\auslastung\\AuslastungFrm.cpp invalid conversion from \void ()()' to `void'
    96 C:\Dev-Cpp\auslastung\AuslastungFrm.cpp initializing argument 2 of `int ActivationTimer::AddTask(long unsigned int, void*, void*)'
    C:\Dev-Cpp\auslastung\Makefile.win [Build Error] [AuslastungFrm.obj] Error 1



  • Hallo,
    der ActivationTimer-Code ist nicht standard-konform. Er erwartet die Funktion in Form eines void-Pointers. Laut Standard können aber nur beliebige Datenzeiger nach void* konvertiert werden. Nicht aber Funktionszeiger. Damit der Compiler den Code übersetzen kann, musst du einen C-Cast einfügen:

    // AuslastungFrm::verbinden ist hoffentlich eine statische Memberfunktion!
    actTimer.AddTask(60000, (void*)&AuslastungFrm::verbinden);
    

    Das geht auf Posix-konformen-System gut. Aber schön ist es nicht.



  • Danke erstmal. Nun wird fehlerfrei kompiliert, aber der Timer funktioniert imho nicht. Es wird keine Verbindung aufgebaut. Werd mich mal nach was anderem umschauen...

    Kennt jemand einen Timer/Scheduler der gewisse Funktionen alle 60sec sowie auch alle 30 Tage(1 mal im monat) ausführen kann?

    Danke & Gruß


Log in to reply