Как добавить временную задержку в программу на C ++? - PullRequest
62 голосов
/ 01 октября 2008

Я пытаюсь добавить временную задержку в программе на C ++, и мне было интересно, есть ли у кого-нибудь какие-либо предложения относительно того, что я могу попробовать или какую информацию я могу посмотреть?

Хотелось бы, чтобы у меня было больше деталей о том, как я реализую эту временную задержку, но пока у меня нет больше информации о том, как добавить временную задержку, я не уверен, как мне следует пытаться реализовать это.

Ответы [ 13 ]

95 голосов
/ 17 марта 2012

Обновленный ответ для C ++ 11:

Используйте функции sleep_for и sleep_until:

#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));
}

С этими функциями больше нет необходимости постоянно добавлять новые функции для лучшего разрешения: sleep, usleep, nanosleep и т. Д. sleep_for и sleep_until - это функции шаблонов, которые могут принимать значения любых разрешение с помощью chrono типов; часы, секунды, фемтосекунды и т. д.

В C ++ 14 вы можете еще больше упростить код с помощью буквальных суффиксов для nanoseconds и 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);
}

Обратите внимание, что фактическая продолжительность сна зависит от реализации: вы можете попросить перевести в спящий режим на 10 наносекунд, но вместо этого реализация может оказаться в спящем режиме в течение миллисекунды, если это самый короткий период, который она может сделать.

62 голосов
/ 01 октября 2008

Win32: Sleep(milliseconds) это то, что вы, что

unix: usleep(microseconds) - это то, что вы хотите.

sleep () занимает всего несколько секунд, что часто слишком долго.

27 голосов
/ 01 октября 2008
#include <unistd.h>
usleep(3000000);

Это также будет спать в течение трех секунд. Вы можете уточнить цифры немного больше.

8 голосов
/ 01 октября 2008

Обратите внимание, что это не гарантирует, что время, в течение которого поток спит, будет где-то близко к периоду ожидания, это только гарантирует, что количество времени, прежде чем поток продолжит выполнение, будет, по крайней мере, желаемым. Фактическая задержка будет варьироваться в зависимости от обстоятельств (особенно нагрузки на рассматриваемый аппарат) и может быть на несколько порядков выше, чем желаемое время ожидания.

Кроме того, вы не перечисляете, почему вам нужно спать, но в целом следует избегать использования задержек в качестве метода синхронизации.

7 голосов
/ 01 октября 2008

Вы хотите что-то простое, как

sleep(3);
3 голосов
/ 12 сентября 2014

Я обнаружил, что "_sleep(milliseconds);" (без кавычек) хорошо работает для Win32, если вы включите библиотеку chrono

например:

#include <chrono>

using namespace std;

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

Перед сном обязательно укажите подчеркивание.

3 голосов
/ 01 октября 2008

Вы также можете использовать select (2), если вы хотите микросекундную точность (это работает на платформе, которая не использует usleep (3))

Следующий код будет ждать 1,5 секунды:

#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);
}

`

2 голосов
/ 01 октября 2008

Да, сон, вероятно, является функцией выбора здесь. Обратите внимание, что время, передаваемое функции, является наименьшим количеством времени, в течение которого вызывающий поток будет неактивным. Так, например, если вы вызываете sleep с 5 секундами, вы гарантированно будете спать в течение как минимум 5 секунд. Может быть 6, 8 или 50, в зависимости от того, что делает ОС. (Во время оптимального выполнения ОС это будет очень близко к 5.)
Другая полезная функция функции сна - передача 0. Это приведет к переключению контекста из вашего потока.

Некоторая дополнительная информация:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html

1 голос
/ 18 апреля 2017

чтобы задержать вывод в cpp на фиксированное время, вы можете использовать функцию Sleep (), включив заголовочный файл windows.h Синтаксис для функции Sleep (): Sleep (time_in_ms) в

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

OUTPUT. Приведенный выше код напечатает Apple и подождите 3 секунды, прежде чем печатать Mango.

1 голос
/ 12 сентября 2014

Вы можете попробовать этот фрагмент кода:

#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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...