Wie fügen Sie eine Zeitverzögerung zu einem C ++ Programm?
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.
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.