Ausgabe der Uhrzeit Sekundengenau
-
Hallöchen,
ich studiere im 2. Semester Technische Informatik und wir sollen ein Matrixmanipulations Programm schreiben. Es ist ein 4 Mann Projekt und mir wurde die Implementierung des Ein/Ausgabesystems anvertraut. Wir sind allesamt C++ neulinge und ich wollte das ganze möglichst schick machen allerdings unter der bedingung das es eine reine konsolenanwendung bleiben soll. Ich würde nun gern die Aktuelle Uhrzeit sekundengenau in den vorhandenen Rahmen schreiben. Ich dachte dabei an etwas wie einen Interrupt. Ich habe bereits Stundenlang gegoogelt und weiss auch das es Events in Ansi c++ nicht gibt.
Kann mir jemand sagen ob mein vorhaben überhaupt realisierbar ist unter den o.g. bedingungen?
Vielen Dank im vorraus.
-
Nix Interrupt, über einen zweiten Thread....
in einer Konsolenanwendung ist diese aber etwas umständlich, in einer Windowsanwendung könnte man dies bspw. einfach üer einen Timer machen....
Beim starten des Programmes erzeugst du einen neuen Thread, welcher parallel zum hauptprogramm abläuft...wenn du das hauptprogramm beendest bspw. tasteneingabe löscht du dann wieder diesen Thread.
In dem thread kannst du über die funtion "sleep(millisekunden)" eine schleife einbauen, welceh dann die uhrzeit "timeGettime" immer an die gleiche position des screens anzeigt....Denke das reicht vorrerst
-
so, ich hab mich mal damit beschäftigt:
als erstes habe ich versucht die boost library zu benutzen. als precompiled mit installer hab ich das nur für vs 7.1 bis 8.0 gefunden. also hab ich mir die 8.0er ver von unserer fh seite gezogen u installiert. danach wollte er das projekt konvertieren. nachdem ich mir eine sicherung des projekts angefertigt habe hab ich ms vs 2005 dann das projekt konvertieren lassen. das resultat war ein projekt das sich weder in meinem alten visualStudio 6 noch in der neuen 2005er version kompillieren liess. nachdem ich dann stunden in die fehlerbehebung gesteckt habe liess sich das prog zwar unter vs 2005 kompillieren aber beim ausführen der exe gab es irgendeinen unmöglichen fehler -is jetz auch egal hab ich noch nie gesehen sowas, jedenfalls keine unbehandelte ausnahme o.ä- also hab ich das vs 2005 wieder runtergehauen (das dauerte übrigens ca. 5h!!!! während vs 6.0 bei mir vom stick läuft auf einem dell latitude D610). so dann habe ich nochma gegoogelt und versucht die source mit bjam zu builden. hat auch funktioniert - naja fast jedenfalls- denn die boost-thread lib hat gefehlt. also hab ich auch das verworfen meine sicherung von dem projekt wiederhergestellt und weitergeggogelt nach einer lösung die ohne die boost lib auf vs 6.0 funzt. seit dem sind 2 1/2 h vergangen und ich spüre langsam die müdigkeit....
hat vll. jemand einen handfesten vorschlag sprich beispielcode?
-
soldalot schrieb:
als erstes habe ich versucht die boost library zu benutzen....
vergiss boost,
#include <stdio.h> #include <windows.h> int main() { SYSTEMTIME s1, s2; while (1) { GetLocalTime (&s1); Sleep (500); GetLocalTime (&s2); if (s1.wSecond != s2.wSecond) printf ("Es ist jetzt: %02d:%02d:%02d\r", s2.wHour, s2.wMinute, s2.wSecond); } }
-
hi,
das problem is das es sich 1. um ein reines c++ proj. handelt also nix printf oder? 2. is das ja ein recht grosses projekt mit aufwendiger menüstruktur etc. ich kann nicht die eingaben oder was auch immer mit sleep aussetzen bzw. kann es u.u. minuten dauern bis der benutzer n eingaben gemacht hat. das ausgeben der uhrzeit ist nur ein winziger bruchteil und ich wollte den eigentlich nur drinhaben weils schick aussieht. also die uhrzeit wird ja angezeigt nur eben nich in "echtzeit"..
ich habe gerade übrigens was gefunden zum thema thread:
-
soldalot schrieb:
das problem is das es sich 1. um ein reines c++ proj. handelt also nix printf oder?
das 'printf' ist ja nur zur demo. du kannst jede andere ausgabefunktion benutzen...
soldalot schrieb:
2. is das ja ein recht grosses projekt mit aufwendiger menüstruktur etc. ich kann nicht die eingaben oder was auch immer mit sleep aussetzen bzw. kann es u.u. minuten dauern bis der benutzer n eingaben gemacht hat. das ausgeben der uhrzeit ist nur ein winziger bruchteil und ich wollte den eigentlich nur drinhaben weils schick aussieht. also die uhrzeit wird ja angezeigt nur eben nich in "echtzeit"..
du könntest die while(1)-schleife in einen separaten thread verlegen, dann bremst das Sleep() dein programm nicht aus. beispiel:
#include <stdio.h> #include <windows.h> DWORD __stdcall thread (void *p) { SYSTEMTIME s1, s2; while (1) { GetLocalTime (&s1); Sleep (500); GetLocalTime (&s2); if (s1.wSecond != s2.wSecond) printf ("Es ist jetzt: %02d:%02d:%02d\n", s2.wHour, s2.wMinute, s2.wSecond); } } int main() { DWORD id; CreateThread (0, 0, thread, 0, 0, &id); for (;;) { puts ("hello clock"); Sleep (200); } }
-
DAS WARS. Vielen lieben Dank

Man sieht das schick aus

-
ich sagte doch.. einfach nen worker thread;)
-
BorisDieKlinge schrieb:
ich sagte doch.. einfach nen worker thread;)
wie? worker?
jeder thread 'worked' doch...
