Programm zum Ermitteln, dass Zeit sich geändert hat.
-
Hey ihr,
Habe ein Programm geschrieben, welches merken soll, wenn ein Windowsbenutzer die Sekunden an der Windowsuhrzeit verstellt:
#include <iostream> #include <ctime> using namespace std; int main () { time_t sekunden = time(NULL); tm * uhr = localtime(&sekunden); int I_Sekunden = uhr->tm_sec; while(1) //Endlosschleife zum Überprüfen. Nachteil: 100% Prozessorauslastung { if(!(uhr->tm_sec == I_Sekunden)) //Überprüfen ob Zeit von oben gemerktem Wert abweicht. Wenn ja... { if(uhr->tm_sec == I_Sekunden-1) //... wird überprüft ob die Abweichung nur bedeutet, dass eine Sekunde vergangen ist. sekunden = uhr->tm_sec; else //Sind komischerweise zu viele Sekunden vergangen, muss jemand die Zeit verändert haben. { cout << "Da muss wer was geaendert haben!" << endl; //Hinweis darauf, dass Zeit geändert wurde. I_Sekunden = uhr->tm_sec; //I_sekunden wird wieder synchronisiert. } } } }
Rein Theoretisch müsste das Proggi ja laufen.
Tut es aber nicht weil...1. Die Prozessorauslastung unheimlich hoch ist.
Wie kann ich das anders als mit na while(1)-Schleife machen?2. Irgendwie funktioniert der Salat auch praktisch noch nicht... jemand ne Idee?
cya
David
-
Erstens: Die Prozessor-Auslastung kannst du etwas runterschrauben, indem du das Programm per Sleep() vorübergehend auf Eis legst.
Zweitens: Es reicht nicht aus, wenn du am Anfang des Programms die Zeit ausliest - das mußt du regelmäßig in der Schleife erledigen:
int main () { time_t zeit=time(NULL),last=zeit; while(1) { zeit = time(NULL); //aktuelle Zeit auslesen int delta = zeit-last; //Differenz berechnen if((delta!=0)&&(delta!=1)) { cout << "Da muss wer was geaendert haben!" << endl; } last = zeit; //Synchronisiert Sleep(500); //senkt Prozessor-Auslastung - wir arbeiten die Schleife nur 2x pro Sekunde ab } }
-
Okay...-.- Dachte, dass sich die Eigenschaften von 'Uhr' automatisch aktualisieren...-.- aber das ist ja auch unlogisch, weil das ja nach Bilden der Klasse eh nimmer sein kann...
In welcher Bibliothek steht 'sleep'???
-
777 schrieb:
Okay...-.- Dachte, dass sich die Eigenschaften von 'Uhr' automatisch aktualisieren...-.- aber das ist ja auch unlogisch, weil das ja nach Bilden der Klasse eh nimmer sein kann...
Wie sollte es denn? time_t ist ein einfacher Ganzzahl-Wert (auf meinem Rechner "typedef long time_t;"), der hat später keine Ahnung mehr, wie er initialisiert wurde.
In welcher Bibliothek steht 'sleep'???
WinAPI - <winbase.h> (btw, das ist ein großes S), auf Unix-Systemen mußt du ausweichen auf man: sleep(3)/de oder man: usleep(3)/de.
-
Jap... richtig.
Etwas komisch an der Winbase ist, dass wenn ich die includiere sehr viele Fehler kommen...
544 C:\Dev-Cpp\include\winbase.h `DWORD' does not name a type
...Irgendwas muss man doch noch beachten, wenn man die einbindet, oder?
cya
David#include <winbase.h> int main(void) { }
-
includier mal windows.h...
-
Et läuft!!!
Thx