Ausgabe von "arbeite noch"-Meldung in einer Schleife
-
Hi
Ich habe hier eine while-Schleife in der *ziemlich* viele Durchläufe passieren. Die Ausführungszeit liegt im Bereich von Minuten.
Ich würde gern so alle 10 bis 20sek eine Ausgabe erzeugen a la "Ich leben noch" auf cout.
Einen Counter hochzählen und ihn in jedem Durchlauf zu prüfen, ob er modulo wasweissich == 0 ist erscheint mir angesichts der dafür in jedem durchgang nötigen abfrage eigentlich unschön/uneffizient.Kennt jemand einen anderen, eleganteren Weg ?
Danke !
Benjamin
-
Also wenn Du keine Möglichkeit hast die Schleife in nen Thread auszulagern auf den von aussen gewartet wird, hast Du keine andere Möglichkeit als hin und wieder während des Schleifendurchlaufs ne Ausgabe zu machen.
Daraus folgt logischerweise dass Du bei JEDEM Schleifendurchlauf eine Abfrage machen musst (Code der "vielleicht" ausgeführt wird gibt es nur in Java2K
). Ob Du dabei einen Zähler modulo X oder einen Zeitwert überprüfst ist dann ziemlich schnuppe.
-
die möglichkeit mit dem thread habe ich - aber nicht die fähigkeit

sowas hab ich noch nie gemacht.
-
es gibt immer ein erstes mal .. oder etwa nicht

gruessle
-
Benja_m schrieb:
die möglichkeit mit dem thread habe ich - aber nicht die fähigkeit

sowas hab ich noch nie gemacht.
Wenn du Programmieren willst musst du auch dafür Fähigkeiten haben, oder sie dir beibringen.
Alternativ kannst du natürlich auch den Timer vom Betriebsystem auslesen und alle drei Sekunden eine Meldung raushauen:!Pseudocode!
t1 = getTime(); //blablalba t2 = getTime(); if ( t2 - t1 > deinegewünschtezeit ) std::cout << "meldung\n";grüße
-
Schau mal in Boost Library rein, da gibts sowohl Threads als auch Timer. Letzteres stellt eine Art Progressbar für die Konsole bereit.
-
David_pb schrieb:
Benja_m schrieb:
die möglichkeit mit dem thread habe ich - aber nicht die fähigkeit

sowas hab ich noch nie gemacht.
Wenn du Programmieren willst musst du auch dafür Fähigkeiten haben, oder sie dir beibringen.
natürlich, deswegen der
hinter meiner aussage (nennen wir es mal faulheit :))David_pb schrieb:
Alternativ kannst du natürlich auch den Timer vom Betriebsystem auslesen und alle drei Sekunden eine Meldung raushauen:
!Pseudocode!
t1 = getTime(); //blablalba t2 = getTime(); if ( t2 - t1 > deinegewünschtezeit ) std::cout << "meldung\n";naja, da kann ich dann aber auch meinen Counter benutzen, kommt aufs selbe hinaus

Trotzdem danke !
-
Artchi schrieb:
Schau mal in Boost Library rein, da gibts sowohl Threads als auch Timer. Letzteres stellt eine Art Progressbar für die Konsole bereit.
Danke, werd es mal hiermit probieren:
http://www.boost.org/libs/timer/
-
Ich denke simpler wäre umformulieren in der folgenden Art:
ausfor( int i= 0; i < e; ++i ) { blubb(); }wird:
for( int i= 0; i < e; ++i ) { int e2= min( i + zahl, e ) for( ; i < e2; ++i ) { blubb(); } std::cout << "alive"; }Bye, TGGC (Das Jahr des Helden)
-
*rauskram*
TGGC schrieb:
Ich denke simpler wäre umformulieren in der folgenden Art:
for( int i= 0; i < e; ++i ) { int e2= min( i + zahl, e ) for( ; i < e2; ++i ) { blubb(); } std::cout << "alive"; }Wie stelle ich das an, wenn ich als Ausgangspunkt eine while-Schleife habe, die auf einen wert schaut, der in ihr geändert wird ?
da fällt mir dann wieder nur der umweg über eine zählervariable ein
-
die while- als for-schleife(n) umschreiben !?
-
int ret = 0; while (ret == 0) { ... ret = blub(); ... }so is meine schleife. komme grad nicht drauf, wie ich das in eine for-schleife packen soll ...

vielleicht isses zu einfach ?
-
Würde mir spontan auch nix besseres zu einfallen als
int ret = 0; while (ret == 0) { for (int i = 0; ret == 0 && i < 100; ++i) { ... ret = blub(); ... } cout << "alive!" << endl; }Was auch über nen Zähler ist, nur anders implementiert...