GetCurrentTime() - Ein kleines Problem
-
Guten Morgen an Alle
Ich habe mich an einem Programm versucht, das im 10-Sekunden-Takt
mir die Zeit in Millisekunden ansagt mitGetCurrentTime()Aber ers wird jetzt jede Milisekunde angezeigt ...Ungewollt!
Hier ist mein Code:
#include <iostream> #include <Windows.h> using namespace std; int main() { static DWORD time; do { time = GetCurrentTime(); const DWORD time2 = GetCurrentTime(); + 10000; if (time2 == time) { cout << GetCurrentTime() << endl; } }while(time != 0); system("pause"); return 0; }Bitte um Hilfe

-
das nimmt dein compiler??
da steht, dass du dir die aktuelle zeit holst und dann willst du 10000ms drauf addieren. das vergleichst du danach mit deinem vormals gemachten timestamp
das kann nicht gutgehen, abgesehen davon, dass du dir die tiemstamps jeden schleifendurchlauf holst und die alten werte überschreibst...int main() { long t1=0, t2 = 10000; while ( true ) { t2 = GetCurrentTime(); if ( t2 >= t1+10000 ) { cout << GetCurrentTime() << endl; t1 = GetCurrentTime(); } } return 0x0; }
-
Danke hat geholfen!!

-
Hab diese funktion mal lange her geschrieben:
Bitte beachte, dass diese funktion MIRCO-, und nicht MILLI-sekunden zurückgibt.
Du wirst auch ein paar header brauchen wie time.h (oder sys/time.h)EDIT & EDIT2: Sorry, free() ist jetzt auch drin.
EDIT3: Ist jetzt auf dem Stack. Kein static mehr. Ungetestet, sollte aber gehen.// returns MIRCOSECONDS long xtime() { timeval tv; gettimeofday(&tv, NULL); return tv.tv_usec + (tv.tv_sec*1000000); }
-
Funzt auch gut !!
-
funktioniert nicht gut !!!!
das ist ein memory leak, wann wird denn diese statische variable gelöscht, bzw der speicher dahinter
pack dein tv einfach in einen auto_ptr (shared_ptr ist zuviel) und danach guckst du mal in scott meyers effektiv c++ programming kapitel 3.1 (tipp 13) in der aktuellen auflage(3. auflage erschienen anfang 2011) durch ! oder gleich das ganze buch
-
lk schrieb:
Hab diese funktion mal lange her geschrieben:
Bitte beachte, dass diese funktion MIRCO-, und nicht MILLI-sekunden zurückgibt.
Du wirst auch ein paar header brauchen wie time.h (oder sys/time.h)// returns MIRCOSECONDS long xtime() { static timeval *tv = (timeval*)malloc(sizeof(timeval)); gettimeofday(tv, NULL); return tv->tv_usec + (tv->tv_sec*1000000); }1. Wo wird free(..) aufgerufen?
2. malloc(..) ist nicht nötig (Punkt 1 erübrigt sich dann)
3. Warum zur Hölle static? Es ist nicht sinnvoll/nötig!
4. Falls static Thread-Safty? (Erübrigt sich wegen Punkt 3.)Edit:
Skym0sh0 schrieb:
pack dein tv einfach in einen auto_ptr (shared_ptr ist zuviel) und danach guckst du mal in scott meyers effektiv c++ programming kapitel 3.1 (tipp 13) in der aktuellen auflage(3. auflage erschienen anfang 2011) durch ! oder gleich das ganze buch
Warum zur Hölle soll das auf dem Heap landen??? Völlig unnötig!!!
-
theta schrieb:
lk schrieb:
Hab diese funktion mal lange her geschrieben:
Bitte beachte, dass diese funktion MIRCO-, und nicht MILLI-sekunden zurückgibt.
Du wirst auch ein paar header brauchen wie time.h (oder sys/time.h)// returns MIRCOSECONDS long xtime() { static timeval *tv = (timeval*)malloc(sizeof(timeval)); gettimeofday(tv, NULL); return tv->tv_usec + (tv->tv_sec*1000000); }1. Wo wird free(..) aufgerufen?
2. malloc(..) ist nicht nötig (Punkt 1 erübrigt sich dann)
3. Warum zur Hölle static? Es ist nicht sinnvoll/nötig!
4. Falls static Thread-Safty? (Erübrigt sich wegen Punkt 3.)Edit:
Skym0sh0 schrieb:
pack dein tv einfach in einen auto_ptr (shared_ptr ist zuviel) und danach guckst du mal in scott meyers effektiv c++ programming kapitel 3.1 (tipp 13) in der aktuellen auflage(3. auflage erschienen anfang 2011) durch ! oder gleich das ganze buch
Warum zur Hölle soll das auf dem Heap landen??? Völlig unnötig!!!
Ich bin eben ein stack verabscheuer. Das errinnert mich an Steak, und die verabscheue ich auch.
Zu 1: war im 1. Edit beseitigt.
2: beseitigt im 3. Edit.
3: Ist ja schon aufm Stack.
4: Deswegen wollte meine multithreading anwendung immer abschtürzen!
-
lk schrieb:
Ich bin eben ein stack verabscheuer. Das errinnert mich an Steak, und die verabscheue ich auch.
dann lern es mal zu schätzen der stack ist saupraktisch und noch mehr sauschneller (;)) und steaks sind auch cool

lk schrieb:
4: Deswegen wollte meine multithreading anwendung immer abschtürzen!
wieso hab ich das gefühl, dass du nicht ganz weisst was du tust?!
-
Skym0sh0 schrieb:
lk schrieb:
4: Deswegen wollte meine multithreading anwendung immer abschtürzen!
wieso hab ich das gefühl, dass du nicht ganz weisst was du tust?!
Vielleicht weil ich an der Uni gerade mit Java gequält werde, und ich C/C++ sehr lange nicht mehr gesehen habe...?
bin dafür diese Diskussion jetzt zu schließen, da sie zu sehr offtopic ist. (Und peinlich auch, insbesondere für mich...
)
-
java ist eigentlich nicht schlecht, weil da übernehmen andere das denken, z.b. die java entwickler und daraus resultierend die compiler/runtime-environments und so
find ich irgendwo doof wenn man jetzt total ineffezienten programmcode schreibt und der so vom compiler optimiert und heruntergebrochen wird, dass der byte code nach ein paar jahren schneller läuft als jedes C/C++ programm, und auch noch paralleles rechnen automatisch mit eingebracht wird...
bald werden wohl computer und betriebssysteme von kindern und DAU's selbst programmiert
-
Skym0sh0 schrieb:
java ist eigentlich nicht schlecht, weil da übernehmen andere das denken, z.b. die java entwickler und daraus resultierend die compiler/runtime-environments und so
Naja, manche Leute halten Java gerade deswegen für schlecht

Skym0sh0 schrieb:
find ich irgendwo doof wenn man jetzt total ineffezienten programmcode schreibt und der so vom compiler optimiert und heruntergebrochen wird, dass der byte code nach ein paar jahren schneller läuft als jedes C/C++ programm
Ich glaube, du machst dir unnötige Sorgen. Zudem muss man auch in Java etwas können, obwohl die Sprache es natürlich leichter als C++ macht, mit wenig Wissen was zustande zu bringen. Für qualitativ hochwertige Software braucht es aber auch hier einiges an Erfahrung...
-
So ich habe mich jetzt mal an einem Programm versucht (mit wenigen euer Codestücke)
Aber es macht nicht ganz was es soll-.-
Es soll kontinuirlich im 1-Sekunden-Takt Daten aus einem bestimmten Ordner löschen und man soll bestätigen das man die Datei löscht.Aber es löscht nur bei Programmstart die Dateien und fragt auch wenn die Datei schon gelöscht wurde immer wieder ob man die Datei löschen will
Hier der Code:void ShowFiles(const char *path,const char *files) { SetCurrentDirectory(path); WIN32_FIND_DATA fileData; HANDLE hFind = FindFirstFile(files, &fileData); long t1=0, t2 = 1000; while ( true ) { t2 = GetCurrentTime(); if ( t2 >= t1+1000 ) { if (hFind != INVALID_HANDLE_VALUE) { do { if (fileData.dwFileAttributes & ~FILE_ATTRIBUTE_DIRECTORY) { cout << "M"<<char(148)<<"chten sie wirklich die Datei " << fileData.cFileName << " L"<<char(148)<<"schen?" << endl; cin.get(); remove(fileData.cFileName); cout << "Datei wurde gelöscht!" << endl; } } while (FindNextFile(hFind, &fileData)); } t1 = GetCurrentTime(); } } }
-
Bist du sicher, dass FindNextFile noch korrekt arbeitet, wenn die Datei, von der die Suche fortgesetzt werden soll, gelöscht wurde?
-
Ach mist ^^
aber ich habe keine ahnung wie ich das bewerkstelligen soll ...
-
Ich kenne mich mit FindFirstFile und FindNextFile auch nicht so aus.
Aber du könntest z. B. erst mit den beiden Funktionen alle Dateinamen bzw. -pfade sammeln, in einem Container speichern und erst danach den Container durchgehen und die einzelnen Datei löschen und das Löschen vom Anwender bestätigen lassen.
-
Was du da machst ist nicht gerade CPU-schonend. Wozu willst du überhaupt so lange warten? Soll der Programmierer das Gefühl bekommen, dass deine Funktion viel arbeitet?
-
Einfach nur aus demonstrativen Zwecken es soll ja kein fertiges Programm werden, sondern nur ein Prototyp ...
Aber ich weiß nichts über Container

-
die sind nicht nur extremst hilfreich sondern auch sehr wichtig weil sie flott sind und dir das gesamte leben ziemlich erleichtern
-
Jetzt bleib nur die Frage welche Container List, Maps oder multimaps
Und füge ich einzelne Daten jeweils hinzu um sie Dann zu löschen ?
-
da suchste dir einen aus und dann guckst du auf dem ersten link wie er benutzt wird...