Sekundenschnell zurückzählen?
-
ist es möglich Sekundenschnell zurückzuzählen?
also so zbsp. nur halt pro sekunde:int a = 1; while(a < 11) ++a;so dass immer .. 1 .. 2 ... 3 ... etc.. gezählt wird?
-
So z.B.
#include <windows.h> int main(){ int a = 1; while(a < 11){ ++a; Sleep(1000); } }
-
Mann solte vllt. noch EEKs Beispiel sagen das es sich auf Windows bezieht.
mfg tobZel
-
Systemunabhängig (aber dafür ressourcen-verbratend):
#include <ctime> #include <iostream> using namespace std; int main() { for (int i = 10; i > 0; --i) { time_t stop = time(0) + 1; while (time(0) < stop) ; cout << "tick" << endl; } }Allerdings stimmt hierbei der erste Tick nicht. Die darauffolgenden sollten relativ genau sein. Wenn auch der erste genau ist, muss man vor dem ersten Schleifendurchlauf nochmal warten. Hintergrund: 'time' arbeitet auf Sekundenbasis.
-
Ansonnsten gibts noch Systemunabhängig die select Methode, mit der das ebenfalls möglich ist:
Some code calls select() with all three sets empty, n zero, and a non- NULL timeout as a fairly portable way to sleep with subsecond preci- sion
-
Wieso nicht gleich boost::thread nehmen? Ist wie die gesammte boost-Lib Systemunabhängig.
-
Hallo,
also systemunabhängig sind weder select noch boost::thread. Beide sind aber recht portable, da sie auf vielen Systemen laufen. select ist eine POSIX-Funktion, die auch unter Win32 existiert und auch boost::thread läuft problemlos auf solchen Systemen.
-
Hm. time() ist auch nicht geeignet um eine Sekunde lang zu warten, da time() die Systemzeit zurückgibt - und die kann in beide Richtungen springen (wenn man z.B. die Zeit mit Hand verstellt oder ein Abgleich mit einem Time-Server stattfindet) und sogar auf einigen Systemen kurz mal "langsamer werden".
Aus dem gleichen Grund würde ich Boost.Thread nicht empfehlen. Die einzige clock die Boost.Thread kennt ist xtime_get(xt, boost::TIME_UTC), und basiert unglücklicherweise genauso auf der Systemzeit wie time() (Ausnahme: nur MPTASKS ist verfügbar, dann liefert xtime_get einfach trotzdem nen "uptime" basierten Wert zurück - was auch gelinde gesagt etwas "mutig" ist). Was im übrigen IMHO einen ernsten Designfehler in Boost.Thread darstellt, da man nie ohne Race-Condition mit timeout auf irgendetwas warten kann (timed_lock(), timed_wait()).
Unter Windows gibt es gottseidank GetTickCount() (leider bloss 32 bit Millisekunden, aber besser als nichts).
Frage: was gibt es unter *NIX/POSIX was man verwenden könnte um Zeit zu *messen* (also nicht select() womit man bloss warten kann)? - eine "uptime clock" sozusagen.
-
Plotzenhotz schrieb:
Frage: was gibt es unter *NIX/POSIX was man verwenden könnte um Zeit zu *messen* (also nicht select() womit man bloss warten kann)? - eine "uptime clock" sozusagen.
Auf POSIX-Systemen liefert clock() die Zeit seit dem Programmstart angeblich in Mikrosekunden.
<a href= schrieb:
cppreference">Note: if your compiler is POSIX compliant, then CLOCKS_PER_SEC is always defined as 1000000
-
clock() liefert die CPU Zeit die für den eigenen Prozess "verbraucht" soweit ich das aus der Doku rauslesen konnte. Also auch nicht die "uptime" des Systems. Also nix womit man real vergangene Zeit messen könnte (die äquivalente Funktion unter Windows wäre GetProcessTimes()). Also auch nicht geeignet
