millisekunden
-
@FreakY,
Du hast es zwar zum Teil schon genannt, aber ich würde da gerne noch ein paar Zusätze bringen:
1. Sleep(1) gibt absolut keine Garantie, dass auch wirklich eine Millisekunde geschlafen wird. Es heisst nur im Minimum, das ist alles. Grundsätzlich wäre es möglich, dass das Programm noch 2 Stunden weiterschläft
2. Wie willst du damit eine Zeit messen? Du kannst einen Timer machen, aber du kannst keine Start- und Endzeit nehmen.
3.system("cls")ist EXTREM zeitraubend. Es braucht ca. 20 - 30 Millisekunden! Nur einer der Gründe, wieso man eben auf einsystemCall verzichten sollte, wo nur möglich.
4.std::coutkann man beschleunigen, durch das Hinzufügen eines Puffers.#include <iostream> int main() { std::size_t const COUT_BUFFER_SIZE = 4096; char coutBuffer[COUT_BUFFER_SIZE]; std::cout.rdbuf()->pubsetbuf(coutBuffer, COUT_BUFFER_SIZE); // Arbeiten mit std::cout wie normal. // ... // std::cout wieder ungepuffert machen: std::cout.rdbuf()->pubsetbuf(0, 0); return 0; }6. Statt
system("cls")kannst du für deinen speziellen Fall ein ähnliches Verhalten auslösen mit dem Carriage Return. Zumindest auf Windows, bei anderen Betriebsystemen habe ich es noch nicht probiert:std::cout << '\r'; // Überschreibe aktuelle Zeile. std::cout << "Was auch immer!";Gerade bei einem Timer, wo es bei 0 anfängt und die Zahl immer wie grösser wird, ist das natürlich sehr praktisch. So bleiben auch nie irgendwelche Überreste der vorherigen Zeile auf der Konsole. Und es geht natürlich nur, für die eine aktuelle Zeile.
Aber wie schon gesagt wurde. Auf Vista, bzw. Windows, empfiehlt es sich
QueryPerformanceCountereinzusetzen. Oder vielleicht noch Boost.DateTime, allerdings ich weiss nicht, wie die Leute dort, die Auflösung der Millisekundenuhr hinbekommen haben. Auch noch eine Möglichkeit wäretimeGetTime, aber wenn du auf Windows bist, dann kannst du eigentlich gleichQueryPerformanceCounternehmen.Grüssli
-
Dravere schrieb:
2. Wie willst du damit eine Zeit messen? Du kannst einen Timer machen, aber du kannst keine Start- und Endzeit nehmen.
3.system("cls")ist EXTREM zeitraubend. Es braucht ca. 20 - 30 Millisekunden! Nur einer der Gründe, wieso man eben auf einsystemCall verzichten sollte, wo nur möglich.Es war nur ein Grundgerüst, da der OP anscheinend keine Ahnung hatte, wie er anfangen soll.
Und zu system habe ich doch geschrieben das es zeitraubend ist. Aber trotzdem gut das du noch einiges erwähnt hast.
-
@FreakY<3Cpp:
Sleep() ist kein Standard C++ und dein Code ist kein Grundgerüst condern zu 100% Humbug.@simon773:
Unter Windows kannst du neben QueryPerformanceCounter auch noch GetTickCount und timeGetTime verwenden. GetTickCount springt üblicherweise in 16ms Schritten (je nach OS mehr oder weniger), und die Genauigkeit von timeGetTime lässt sich über timeBeginPeriod einstellen (bis auf min. 2ms runter).
-
Dravere schrieb:
6. Statt
system("cls")kannst du für deinen speziellen Fall ein ähnliches Verhalten auslösen mit dem Carriage Return. Zumindest auf Windows, bei anderen Betriebsystemen habe ich es noch nicht probiert:std::cout << '\r'; // Überschreibe aktuelle Zeile. std::cout << "Was auch immer!";Gerade bei einem Timer, wo es bei 0 anfängt und die Zahl immer wie grösser wird, ist das natürlich sehr praktisch. So bleiben auch nie irgendwelche Überreste der vorherigen Zeile auf der Konsole. Und es geht natürlich nur, für die eine aktuelle Zeile.
Ah, wie genial! Das wusste ich noch nicht. Vielen Dank - das werd ich wohl oefter gebrauchen koennen
(zur plattformunabhaengigkeit: ist das nicht standardisiert?)Gruss
Cartman
-
Eric Cartman schrieb:
Ah, wie genial! Das wusste ich noch nicht. Vielen Dank - das werd ich wohl oefter gebrauchen koennen
(zur plattformunabhaengigkeit: ist das nicht standardisiert?)ich habs bis vor wenigen minuten auf linux benutzt.
-
volkard schrieb:
Eric Cartman schrieb:
Ah, wie genial! Das wusste ich noch nicht. Vielen Dank - das werd ich wohl oefter gebrauchen koennen
(zur plattformunabhaengigkeit: ist das nicht standardisiert?)ich habs bis vor wenigen minuten auf linux benutzt.
Danke fuer die Info, also ist es plattformunabhaengig, das wollt ich wissen

Gruss
Cartman
-
Dravere schrieb:
std::coutkann man beschleunigen, durch das Hinzufügen eines Puffers.
Nur um den TO nicht zu verwirren: std::cout ist doch standardmässig gepuffert. Du kannst natürlich nachträglich die Puffergröße ändern.
-
Aquae schrieb:
Nur um den TO nicht zu verwirren: std::cout ist doch standardmässig gepuffert. Du kannst natürlich nachträglich die Puffergröße ändern.
Nein, es gibt leider keine Garantie, dass
std::coutper Standard gepuffert ist. Typisches Beispiel ist die Dinkumware Standardbibliothek, die hat keine Pufferung drin. Sie wird zum Beispiel vom MSVC eingesetzt.
Wie kommst du überhaupt darauf, sowas zu behaupten?Grüssli
-
Nunja, wie ich dazu komme... der unwissenschaftliche Weg, ich gebe es zu. Rein aus Erinnerung.
Aber du hast Recht, der Standard verliert kein Wort darüber, dass cout gepuffert sein muss. Das Objekt muss nur existieren.Und ich kann mich nicht mal rauswinden, dass das doch quasi alle Compiler-Hersteller gepuffert machen, hmm.
-
danke an alle!!
hab mit QueryPerformanceCounter gefunden, was ich suchte
-
Dravere schrieb:
Wie kommst du überhaupt darauf, sowas zu behaupten?
Ist es so speziell, wenn jemand mal einen Fehler macht? Es kommt doch bei uns allen ab und zu vor, dass wir von einer Annahme ausgehen, ohne diese genau hinterfragt zu haben. Gerade in C++, wo so viele Dinge verschwommen und implementation-defined sind.

-
Nexus schrieb:
Dravere schrieb:
Wie kommst du überhaupt darauf, sowas zu behaupten?
Ist es so speziell, wenn jemand mal einen Fehler macht? Es kommt doch bei uns allen ab und zu vor, dass wir von einer Annahme ausgehen, ohne diese genau hinterfragt zu haben. Gerade in C++, wo so viele Dinge verschwommen und implementation-defined sind.

Ne, ich dachte er hätte es irgendwo gelesen oder so. Dann könnte man dieses Buch oder Tutorial auf die schwarze Liste nehmen oder den Autoren anschreiben.
War also gar nicht gegen Aquae gerichtet, mir ging es nur um die Information, woher er dies hat. Es ist nämlich fast schon eine standardisierte Fehlannahme
Grüssli
-
Gut, dann hab ich das falsch verstanden, sorry.
Dravere schrieb:
standardisierte Fehlannahme

Hm, da gibts aber einige davon. Das wäre mal was für ein Buch. :p