Я хочу добавить задержку к моему обратному коду C ++ code [duplicate]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

472
задан Prasanth Madhavan 4 February 2015 в 11:30
поделиться

12 ответов

360
ответ дан Tshepang 26 August 2018 в 22:27
поделиться
31
ответ дан CB Bailey 26 August 2018 в 22:27
поделиться
77
ответ дан Community 26 August 2018 в 22:27
поделиться
9
ответ дан foobar 26 August 2018 в 22:27
поделиться
17
ответ дан Johan Kotlinski 26 August 2018 в 22:27
поделиться
0
ответ дан lama12345 26 August 2018 в 22:27
поделиться
3
ответ дан Madhava Gaikwad 26 August 2018 в 22:27
поделиться
29
ответ дан Peter Mortensen 26 August 2018 в 22:27
поделиться
6
ответ дан Tanuva 26 August 2018 в 22:27
поделиться
880
ответ дан Toby Speight 26 August 2018 в 22:27
поделиться

На платформах с функцией select (POSIX, Linux и Windows) вы можете сделать:

void sleep(unsigned long msec) {
    timeval delay = {msec / 1000, msec % 1000 * 1000};
    int rc = ::select(0, NULL, NULL, NULL, &delay);
    if(-1 == rc) {
        // Handle signals by continuing to sleep or return immediately.
    }
}

Однако в настоящее время существуют лучшие альтернативы.

29
ответ дан Peter Mortensen 15 October 2018 в 11:02
поделиться
  • 1
    а вызов Windows - в миллисекундах. – shindigo 13 September 2013 в 15:06
  • 2
    Вы должны включить & lt; unistd.h & gt; или & lt; Windows.h & gt; соответственно. – gbmhunter 7 May 2014 в 06:13
  • 3
    Одной из проблем с этим кодом является то, что он занят циклом, и он будет продолжать использовать 100% одного ядра процессора. Функция сна реализована вокруг вызова ОС, который будет сбрасывать текущий поток и делать что-то еще, и только пробудит поток, когда истечет указанное время. – Ismael 20 May 2014 в 23:53
  • 4
    Вы правы - он будет потреблять 100% одного ядра процессора. Итак, здесь переписан код с использованием системных функций сна - и он по-прежнему кросс-платформенный: – Bart Grzybicki 23 May 2014 в 23:25
  • 5
    Что значит, у него нет предела? У него наверняка есть предел, равный 0xFFFFFFFE. Ожидание 0xFFFFFFFF просто не закончится (это означает, что он будет ждать окончания программы). – Izzy 16 January 2015 в 10:31
  • 6
    Я не имел в виду, что это Иззи, извините за наше недоразумение. Я имел в виду, что вы можете ввести любое положительное количество миллисекунд. Поэтому он будет ожидать, что многие миллисекунды закроют программу. Если вы не поймете, скажите так, я объясню вам больше. – genius 18 January 2015 в 17:54
  • 7
    Да, но не может ли фактическое временное разрешение быть 15-16 мс (даже если устройство в вызове составляет 1 мс), и, таким образом, минимальное время составляет 15-16 мс? – Peter Mortensen 6 October 2017 в 17:38
  • 8
    Да, но каково это фактическое временное разрешение? Не может ли это быть 15-16 мс в некоторых случаях? Например, если вы используете Sleep (3), будет ли он действительно спать в течение 3 мс или вместо этого будет 15-16 мс? – Peter Mortensen 6 October 2017 в 17:46
  • 9
    @BartGrzybicki Я знаю, что это старый ответ и все, но в Visual Studio 2017 на машине Windows #ifdef WIN32 не оценивается как true по умолчанию. – kayleeFrye_onDeck 20 June 2018 в 03:02
  • 10
    Кажется, что не компилируется в VS2017 на машине Windows: error LNK2019: unresolved external symbol _select@20 referenced in function "void __cdecl sleep(unsigned long)" (?sleep@@YAXK@Z) – kayleeFrye_onDeck 20 June 2018 в 03:07
  • 11
    @kayleeFrye_onDeck Он компилируется. Просто не ссылки. Просмотрите свои документы Windows. – Maxim Egorushkin 20 June 2018 в 09:10

Способ спать вашей программы на C ++ - это метод Sleep(int). Файл заголовка для него - #include "windows.h."

Например:

#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;

int main()
{
    int x = 6000;
    Sleep(x);
    cout << "6 seconds have passed" << endl;
    return 0;
}

Время, в которое он спит, измеряется в миллисекундах и не имеет ограничений.

Second = 1000 milliseconds
Minute = 60000 milliseconds
Hour = 3600000 milliseconds
29
ответ дан Peter Mortensen 15 October 2018 в 11:02
поделиться
  • 1
    а вызов Windows - в миллисекундах. – shindigo 13 September 2013 в 15:06
  • 2
    Вы должны включить & lt; unistd.h & gt; или & lt; Windows.h & gt; соответственно. – gbmhunter 7 May 2014 в 06:13
  • 3
    Одной из проблем с этим кодом является то, что он занят циклом, и он будет продолжать использовать 100% одного ядра процессора. Функция сна реализована вокруг вызова ОС, который будет сбрасывать текущий поток и делать что-то еще, и только пробудит поток, когда истечет указанное время. – Ismael 20 May 2014 в 23:53
  • 4
    Вы правы - он будет потреблять 100% одного ядра процессора. Итак, здесь переписан код с использованием системных функций сна - и он по-прежнему кросс-платформенный: – Bart Grzybicki 23 May 2014 в 23:25
  • 5
    Что значит, у него нет предела? У него наверняка есть предел, равный 0xFFFFFFFE. Ожидание 0xFFFFFFFF просто не закончится (это означает, что он будет ждать окончания программы). – Izzy 16 January 2015 в 10:31
  • 6
    Я не имел в виду, что это Иззи, извините за наше недоразумение. Я имел в виду, что вы можете ввести любое положительное количество миллисекунд. Поэтому он будет ожидать, что многие миллисекунды закроют программу. Если вы не поймете, скажите так, я объясню вам больше. – genius 18 January 2015 в 17:54
  • 7
    Да, но не может ли фактическое временное разрешение быть 15-16 мс (даже если устройство в вызове составляет 1 мс), и, таким образом, минимальное время составляет 15-16 мс? – Peter Mortensen 6 October 2017 в 17:38
  • 8
    Да, но каково это фактическое временное разрешение? Не может ли это быть 15-16 мс в некоторых случаях? Например, если вы используете Sleep (3), будет ли он действительно спать в течение 3 мс или вместо этого будет 15-16 мс? – Peter Mortensen 6 October 2017 в 17:46
  • 9
    @BartGrzybicki Я знаю, что это старый ответ и все, но в Visual Studio 2017 на машине Windows #ifdef WIN32 не оценивается как true по умолчанию. – kayleeFrye_onDeck 20 June 2018 в 03:02
Другие вопросы по тегам:

Похожие вопросы: