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

StackOverflow https://stackoverflow.com/questions/158585

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Вин32: Sleep(milliseconds) это то, что ты что

Юникс: usleep(microseconds) это то, что вы хотите.

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

Другие советы

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

#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(milliseconds);" (без кавычек) хорошо работает для Win32, если вы включите chrono библиотека

Например:

#include <chrono>

using namespace std;

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

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

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

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

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

#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 секунды, прежде чем печатать Mango.

Синтаксис:

недействительный сон (беззнаковые секунды);

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top