Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Обновленный ответ для С++ 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; часы, секунды, фемтосекунды и т.д.

В С++ 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 наносекунд, но реализация может закончиться спать на миллисекунду вместо этого, если это самое короткое, что она может сделать.

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

sleep(3);

Ответ 6

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

`

Ответ 7

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

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

Ответ 8

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

например:

#include <chrono>

using namespace std;

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

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

Ответ 9

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

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

Ответ 10

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

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

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

Ответ 11

Синтаксис:

void sleep (беззнаковые секунды);

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

Ответ 12

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

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

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

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

Ответ 13

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