Frage

Ich versuche, eine Zeitverzögerung in einem C ++ Programm hinzuzufügen, und frage mich, ob jemand irgendwelche Vorschläge auf, was hat ich versuchen kann, oder Informationen, die ich kann aus?

Ich wünschte, ich mehr Details hatte, wie ich diese Zeitverzögerung bin die Umsetzung, aber bis ich mehr Informationen darüber, wie eine Zeitverzögerung hinzuzufügen, ich bin nicht sicher, wie ich soll auch dies umzusetzen versuchen.

War es hilfreich?

Lösung

Win32: Sleep(milliseconds) ist, was Sie, was

Unix. usleep(microseconds) ist, was Sie wollen

sleep () dauert nur einige Sekunden, die oft zu lang ist.

Andere Tipps

Eine aktualisierte Antwort für C ++ 11:

Mit den sleep_for und sleep_until Funktionen:

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread; // sleep_for, sleep_until
    using namespace std::chrono; // nanoseconds, system_clock, seconds

    sleep_for(nanoseconds(10));
    sleep_until(system_clock::now() + seconds(1));
}

Mit diesen Funktionen ist es nicht mehr notwendig, um immer wieder neue Funktionen für eine bessere Auflösung hinzuzufügen: sleep, usleep, nanosleep usw. sleep_for und sleep_until sind Template-Funktionen, die Werte von jeder Auflösung über chrono Typen annehmen kann; Stunden, Sekunden, Femtosekunden, etc.

In C ++ 14 Sie können weiterhin den Code mit dem wörtlichen Suffixe vereinfachen für nanoseconds und seconds:

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread;     // sleep_for, sleep_until
    using namespace std::chrono_literals; // ns, us, ms, s, h, etc.
    using std::chrono::system_clock;

    sleep_for(10ns);
    sleep_until(system_clock::now() + 1s);
}

Beachten Sie, dass die tatsächliche Dauer eines Schlaf hängt von der Implementierung: Sie können für 10 ns schlafen fragen, aber eine Implementierung könnte stattdessen für eine Millisekunde schlafen am Ende, wenn das der kürzeste ist es tun können,

.
#include <unistd.h>
usleep(3000000);

Dies wird auch drei Sekunden lang schlafen. Sie können die Zahlen ein wenig mehr, obwohl verfeinern.

Haben Sie etwas so einfach wollen wie

sleep(3);

Beachten Sie, dass dies nicht garantiert, dass die Höhe der Zeit schläft der Thread irgendwo in der Nähe der Schlafperiode sein wird, ist es garantiert nur, dass die Menge der Zeit, bis die Thread-Ausführung weiterhin zumindest die gewünschte Menge wird. Die tatsächliche Verzögerung hängt von den Umständen abhängig (vor allem in Frage auf der Maschine) und kann um Größenordnungen höher als die gewünschte Schlafzeit sein.

Auch, listen Sie nicht, warum Sie schlafen müssen, aber Sie sollten in der Regel unter Verwendung von Verzögerungen als eine Methode zur Synchronisation vermeiden.

Sie können auch wählen (2) verwenden, wenn Sie mikrosekundengenau wollen (dies funktioniert auf der Plattform, die nicht über usleep (3))

Der folgende Code wird warten auf 1,5 Sekunden:

#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>`

int main() {
    struct timeval t;
    t.tv_sec = 1;
    t.tv_usec = 500000;
    select(0, NULL, NULL, NULL, &t);
}

`

ich das "_sleep(milliseconds);" gefunden (ohne die Anführungszeichen) funktioniert gut für Win32, wenn Sie die chrono Bibliothek enthalten

Z. B:

#include <chrono>

using namespace std;

main
{
    cout << "text" << endl;
    _sleep(10000); // pauses for 10 seconds
}

Stellen Sie sicher, dass Sie den Unterstrich vor dem Schlafen sind.

Ja, schlafen ist wahrscheinlich die Funktion der Wahl hier. Beachten Sie, dass die Zeit, in der Funktion übergeben die kleinste Menge an Zeit ist der aufrufende Thread inaktiv. So zum Beispiel, wenn Sie schlafen mit 5 Sekunden anrufen, sind Sie garantiert Ihr Gewinde für mindestens 5 Sekunden lang schlafen wird. Könnte 6 oder 8 oder 50, je nachdem, was das Betriebssystem tut. (Während der optimalen OS Ausführung, dies wird ganz in der Nähe 5.)
Eine weitere nützliche Funktion der Schlaffunktion in 0 passieren ist dies ein Kontextwechsel von Ihrem Thread zwingen wird.

Einige zusätzliche Informationen:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep. html

Sie können versuchen, diesen Code-Snippet:

#include<chrono>
#include<thread>

int main(){
    std::this_thread::sleep_for(std::chrono::nanoseconds(10));
    std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1));
}

für feste Zeitausgabe in cpp zu verzögern, können Sie die Sleep () Funktion von windows.h Header-Datei einschließlich Syntax für Sleep () -Funktion ist Sleep (time_in_ms) wie

cout<<"Apple\n";
Sleep(3000);
cout<<"Mango";

OUTPUT. obiger Code wird Apple vor dem Drucken Mango für 3 Sekunden drucken und warten.

Syntax:

void sleep (unsigned Sekunden);

sleep () unterbricht die Ausführung für ein Intervall (Sekunden). Bei einem Anruf zu schlafen, wird das aktuelle Programm von der Ausführung für die Anzahl von Sekunden durch das Argument angegebenen Sekunden suspendiert. Das Intervall ist genau nur auf das nächste Hundertstel einer Sekunde oder die Genauigkeit der Betriebssystem Uhr, je nachdem, was weniger genau ist.

Viele andere haben zum Schlafen gute Informationen zur Verfügung gestellt. Ich stimme mit Keil, einen Schlaf selten die am besten geeigneten Lösung.

Wenn Sie schlafen, wie Sie etwas warten, dann sind Sie besser dran, warten tatsächlich für diese Sache / Ereignis. Schauen Sie sich Bedingungsvariablen für diese.

Ich weiß nicht, was OS Sie dies versuchen, auf zu tun, aber zum Einfädeln und Synchronisation Sie auf die Boost-Threading Bibliotheken ( Boost-Zustand Varriable ).

jetzt in anderen Extrem bewegen, wenn Sie für eine außergewöhnlich kurze Zeit zu warten, versuchen, dann gibt es ein paar Hack-Stil-Optionen. Wenn Sie auf irgendeine Art von Embedded-Plattform arbeiten, wo ein ‚Schlaf‘ nicht implementiert ist, dann können Sie eine einfache Schleife versuchen (for / while etc) mit einem leeren Körper (Vorsicht der Compiler es nicht optimieren entfernt). Natürlich ist die Wartezeit auf die spezifische Hardware in diesem Fall abhängig. Für wirklich kurz ‚wartet‘ Sie eine Assembly „nop“ versuchen. Ich bezweifle stark, das ist, was Sie nach, aber ohne zu wissen, warum Sie warten müssen, es ist schwer präziser zu sein.

Unter Windows können Sie die Windows-Bibliothek enthalten und verwenden "Sleep (0);" das Programm zu schlafen. Es dauert einen Wert, der Millisekunden darstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top