Uhrzeit in eine Klasse integrieren?
-
Hallo!
Vorweg: Ich lese schon ne ganze Weile rum und habe auch die MSDN bemüht. Aber das Vieh is sooo groß - vor allem wenn man nich genau weiß, was man eigentlich suchen muß.
Ich habe ein C++ MFC-Programm. In diesem Programm fehlt eine Funktion. Die Funktion habe ich soweit fertig und die läuft auch. Da diese Funktion Daten an einen Webserver schickt, wäre es gut, den Funktionsaufruf von einer Art Timer abhängig zu machen (zum Beispiel alle 20 Minuten) - damit nicht bei 1000 Usern der Server zusammenbricht (so wie es jetzt ist, wird auf dem Webserver n Formular befüllt und der Inhalt dann in einer MySQL-Datenbank abgespeichert - daher muß ich das nun begrenzen). Die Stelle des Programms wird aber permanent durchlaufen - daher muß dieser Funktionsaufruf von einem Timer o.ä. abhängig sein.
Frage:
Wie kann ich in das bestehende Programm eine Klasse wie z.B. CTime integrieren, die innerhalb des Funktionsaufrufes in etwa folgendes tun soll:aktuelle Uhrzeit ermitteln (GetCurrentTime oder ähnlich) Variable = Stunden+Minuten VariableAlt = 0 Konstante = 20 //Und dann halt sowas wie If VariableAlt + Konstante > Variable dann { nix } else{ Funktionsaufruf; VariableAlt = Variable; }
Ich hoffe es ist deutlich geworden was ich eigentlich will. Bisher bekomme ich immer Fehlermeldungen beim Kompilieren wie
f:\Programmpfad\dateiname.cpp(125): error C2352: 'ATL::CTime::GetHour::ATL::CTime::GetHour' : Unzulässiger Aufruf einer nicht statischen Memberfunktion
usw.
Komme aus eine völlig anderen Ecke - hab sonst mit C++ oder Java nix am Hut.
Bin dankbar für jede Hilfe oder Link
Grüße
ComicHeld
-
Du kannst einfach die WM_TIMER Message benutzen.
Mit
SetTimer(1,1000,NULL);
wird jede Sekunde eine Message WM_Timer ausgelöst.
Den Timer beenden
mit
KillTimer(1);Die "1" bedeutet der Timer mit der Nummer 1 dann man ja mehrere laufen lassen kann.
z.B.SetTimer(1,1000,NULL);
SetTimer(2,1000,NULL);Startet 2 Timer. Einen mit der Nummer 1 und einen mit der Nummer 2
Diese läßt sich in der OnTimer() funktion dann abfragen
-
Hi
Erstmal: Vielen Dank für Deine Antwort!
Hab nun zwei Stunden herumgebastelt und muß leider zugeben, dass ich es nicht zum laufen bekomme.
Die MSDN sagt zu CWnd::SetTimer:
void CMainFrame::OnTimer(UINT nIDEvent) { MessageBeep(0xFFFFFFFF); // Beep // Call base class handler. CMDIFrameWnd::OnTimer(nIDEvent); }
Das kann ich so ned machen, weil der Funktionsaufruf nur ne Unteroutine sein soll, hhmm, kann ich schlecht erklären.
Also in etwa so:
void irgendwas::irgendwas (blabla* blabla2){ if (connecting == false) { DestroySocket(sender); return; } //Jetzt würde ich den Timer initialisieren... SetTimer(1,1200000,NULL); //jetzt wird ne Funktion aufgerufen if (blablablablabla); //Funktion erledigt //hier muß der code If/else für den Timer hin if (Timer<1200000) {then nichts soll passieren} else { servercheck->update("www.meineseite.net",80,"/Verzeichnis/script.php?function=add&",sender->cur_server->GetAddress(),sender->cur_server->GetPort(),sender->cur_ser ver->GetListName(),sender->cur_server->GetUsers(),sender->cur_server->GetFiles()); if (update){ update->ResetFailedCount(); theApp.progdlg->serverwnd.serverlistctrl.RefreshServer( update ); KillTimer(1); } //hier ist der aufruf zuende
Ich weiß - für euch ist das sicher nervig - aber leider bekomme ich den Teil nicht hin. Oder muß ich das ganz anders aufrufen?
Einfach gesagt benötige ich nur ne grundsätzlich korrekte Syntax für den folgenden Bereich:
if (Timer<1200000) {then nichts soll passieren} else {
Sorry und Danke
Greetz
ComicHeld
-
Du brauchst den Timer nach SetTimer nicht aufrufen.
Mit SetTimer wird er gestartet.
Ist er abgelaufen wird die OnTimer mit dem Code darin automatisch aufgerufen.
-
Hat geklappt (auch wenn ich lange dran gestrickt hab *gg*)
VIELEN DANK !
-
Was soll das "then" hinter dem if eigentlich???