Zeitbeschränkung
-
Wenns mehr Aufwand auch bringt:
Erstelle einen Windowstimer der jede Sekunde eine Funktion aufruft die den Text ausgibt. Diese Funktion öffnest du einfach in einem neuen Thread - der Timer läuft also weiter.
MfG SideWinder
-
So dürfte es auch ganz gut klappen:
... interval=1; //in Sekunden while(...) { start=time(0); ... while(time(0)-start<interval) Sleep(1); //Damit das System auch noch was machen kann }
-
@AJ: Ist aber fast wie mit:
while(!kbhit()) char c (getch());
auf eine Eingabe zu warten...
MfG SideWinder
-
@Side
Ich glaube da täuschst du dich jetzt aber.
Du kannst ja mal versuchen das Sleep(1) wegzulassen. Wenn du das System unbedingt unnötig belasten möchtest.Eine schönere Lösung wäre natürlich, wenn man genau die millisekunden rauskriegen würde, die zwischen Schleifenanfang und -ende liegen und diese dann von 1000 abzieht. Leider kenne ich dazu keine Funktionen
-
Ups dachte, dass Sleep(1) nach der Schleife ist - warum bist du auch zu faul Klammern zu setzen :p;).
Also da time() sowieso nur Sekunden liefert bringts dir wenig 1ms bei Sleep() zu warten - da kannst du gleich mehr einstellen.
MfG SideWinder
-
@Side
Schau dir die Schleife nochmal genauer an. (... steht übrigens für Quellcode, der dazwischen liegt ;))Ich warte einfach nur bis die Sekunde um ist
Wobei mir grad auffällt, dass das zu Fehlern führen könnte. Ich glaub die beste Lösung ist immer noch Sleep(1000) um eine Sekunde zu warten. Vorausgesetzt der Quellcode in der Schleife ist nicht zu Zeitaufwendig, aber das kann man ja im Feldversuch noch etwas abstimmen.PS:
Das mit den Klammern nicht setzen, hab ich mir in der Arbeit angewöhnt, weil mein Chef den Code "übersichtlich" haben wollte. Das er also soviel Quellcode wie möglich auf dem Bildschirm sehen kann.
-
Hier eine Lösung mit API-Funktionen, und eine höhern Auflösung als Sekunden.
LARGE_INTEGER start,end,f; long int value; double frq; QueryPerformanceFrequency(&f); frq=1.00/(double)f.QuadPart*1000.0; QueryPerformanceCounter(&start); while(...) { //............ Mache hier deine Arbeit QueryPerformanceCounter(&end); value=DelayTimeInMilleSek - ((double)(end.QuadPart-start.QuadPart))*frq; start=end; Sleep(value); }
-
Weiß nicht an was das liegt aber bei mir klappt die Sleep Funktion nur mit printf. Ist Sleep mit C++ nicht kompatibel????!??
void main(void)
{
int Ende=0;
while(!Ende)
{
printf("Test");
Sleep(100);if(_kbhit())
Ende=1;
}}
dies klappt -> Test wird nacheinander Ausgegebenvoid main(void)
{
int Ende=0;
while(!Ende)
{
cout<<"Test";
Sleep(100);if(_kbhit())
Ende=1;
}}
Dies klappt nicht??????? An was liegt das?
-
Ich glaube das Problem liegt am Eingabepuffer von cout den printf() nicht hat.
Versuch mal statt deiner cout-Ausgabe diese, bei der am Ende noch geflusht wird:
cout << "Test" << flush; // bzw. endl (flushen + newline) cout << "Test" << endl;
MfG SideWinder
-
Danke! Ja du hast recht. Aber dann war dein Code den du weiter oben geschrieben hast nicht richtig oder?
while(Bedingung) { cout << "Text"; Sleep(990); // 1000ms = 1 Sekunde, 10ms rechnen wir für einen Durchgang ab }
-
Stimmt auch wieder
MfG SideWinder