Как добавить временную задержку в программу на C++?


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

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

13 54

13 ответов:

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

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

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

обновленный ответ для 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);
}
#include <unistd.h>
usleep(3000000);

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

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

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

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

sleep(3);

вы также можете использовать 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);
}

'

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

дополнительные information:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html

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

например:

#include <chrono>

using namespace std;

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

убедитесь, что вы включили подчеркивание перед сном.

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

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

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

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

выход. выше код будет печатать Apple и ждать в течение 3 секунд перед печатью манго.

синтаксис:

void sleep (unsigned seconds);

sleep () приостанавливает выполнение на интервал (секунды). При вызове режима сна текущая программа приостанавливается от выполнения на количество секунд, указанное аргументом seconds. Интервал точен только до ближайшей сотой доли секунды или до точности часов операционной системы, в зависимости от того, что является менее точным.

многие другие предоставили хорошую информацию для сна. Я согласен с Веджем, что сон редко самое подходящее решение.

Если вы спите, как вы ждете чего-то, то вам лучше на самом деле ждать этой вещи/события. Посмотрите на переменные условия для этого.

Я не знаю, на какой ОС вы пытаетесь это сделать, но для потоковой передачи и синхронизации вы можете посмотреть на Ускорение Резьбонарезной библиотеки (Увеличить Состояние Коммерчески).

переходим теперь к другой крайности, если вы пытаетесь ждать исключительно короткие периоды, то есть несколько вариантов стиля рубить. Если вы работаете на какой-то встроенной платформе, где " сон " не реализован, вы можете попробовать простой цикл (for/while и т. д.) с пустым телом (будьте осторожны, компилятор не оптимизирует его). Конечно, время ожидания зависит от конкретного оборудования в этом случае. Для действительно коротких "ожиданий" вы можете попробовать сборка "НОП". Я очень сомневаюсь, что это то, что вам нужно, но, не зная, почему вам нужно ждать, трудно быть более конкретным.

в Windows вы можете включить библиотеку windows и использовать "Sleep(0);" для сна программы. Он принимает значение, представляющее миллисекунды.