Schleifenproblem

  • C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schleifenproblem

    Tach die Damen

    Ich hab ne Schleife:

    Quellcode

    1. while(dummytext)
    2. {
    3. nehmen wir mal als Beispiel
    4. }

    und wie bekomm ich das jetzt hin, dass die Schleife, sagen wir mal sie wird jetzt hundertmal ausgeführt, nicht sofort hintereinander ausgeführt wird, sondern erst nach allen 10 sek. einmal ausgeführt wird?
    Also in diesem Fall erst nach ca. 16 Minuten beendet ist?

    :hy: :hy:

    wer weiß rat?
    [font="Fixedsys"][/font]

    [COLOR="Purple"]Du fehlst uns Laforge[/color] - [COLOR="Silver"]21.08.2004[/color]
    [COLOR="Purple"]Keine Straße ist lang mit einem Freund an deiner Seite[/color]
  • also ich als anfänger würde sagen, (wies man bei assambler macht) bau in der schleife noch eine schleife, die 10 sec. läuft. Kannst bestimmt nachschauen, wie lang die befehle dauern.

    also:

    while(dummytext)

    {

    while(...) //soll 10 sec dauern
    {
    }
    nehmen wir mal als Beispiel
    }

    gruß
    ps: ich glaub wenn du in der schleife nichts rein schreibst, also ohne inhalt, läuft sie 1 mili.sec
  • So einfach ist das nicht, da eine Schleife auf jedem Computer unterschiedlich schnell abgearbeitet wird. In C++ gibts aber dafür die ctime.h. Da sind einige Zeitklassen drin, kannste dir ja in der MSDN anschauen.

    Ciao :lego:
    [SIZE=1]Dumme Antworten sind rein zufällig und auf einen Fehler in der Speicherverwaltung zurückzuführen
    [/SIZE]
  • Da die Schleife auf verschiedenen Computer schneller oder langsamer läuft, muss die die Hardwareuhr des Computers benutzen.
    Es gibt ( auf jeden Fall in C++ ) Funktionen, mit denen man die Hardwareuhrzeit abfragen kann.
    Dann rufst du die halt auf und schaust bei jedem Durchlauf nach, ob die vorher gespeicherte Zeit ( vor dem 1. Durchlauf gespeicherte Zeit ) schon 10 Sekunden ist oder nicht.
  • Ich frage mich warum ihrs euch so schwer machen wollt, Win32 hat doch ne wunderbare API-Funktion die da heißt Sleep(). :)

    Also oben mit reinschreiben #include <windows.h> und dann eben

    while (something)
    {
    do this
    Sleep(10000);
    }

    Bei Sleep() gibste die Zeit in Millisekunden an, sprich 10000 sind 10 Sekunden.
  • while(dummytext)

    ...und sicherheitshalber noch einen passenden Quellcode:

    #include "windows.h"
    #include "iostream.h"

    int main(int argc, char* argv[])
    {
    int i=0;

    while(i<=100)
    {
    cout << "Wert von i: " << i << endl;
    Sleep(10000);
    i++;
    }
    return 0;
    }
  • Hoi
    wenn du nun aber den program platform unabhängig machen willst
    (ohne windows.h) ist die einfachste methode mit ctime (evt auch ctime.h)
    leider nicht sehr CPU freundlich...


    #include <ctime>

    void warte(double dt) // dt in sekunden
    {
    unsigned int t0 = clock(); // gibt zeit seit dem systemstart in CLOCKS zurück
    while( ((clock()-t0)/(1.0*CLOCKS_PER_SEC)) < dt )
    {} // ja ich weiss nicht so CPU freundlich
    }


    es gibt so viel ich weiss auch das pendat zu Sleep unter *nix, ect weiss jemand was man dort braucht?