сон — пауза в каком методе?

Я заметил два разных способа «сделать паузу» в C ++. (Хотя я думаю, что правильное название для него sleepИнж.)

Метод 1 (вероятно, метод наиболее знаком с):

#include <iostream>
#include <unistd.h>
int main() {
std::cout<<"Hello, "<<std::endl;
sleep(1);
std::cout<<"world!\n";
return 0;
}

И метод, который я изучил первым:

#include <iostream>
#include <thread>
#include <chrono>
int main() {
std::cout<<"Hello, "<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout<<"world!\n";
return 0;
}

Я не спрашиваю, какой путь право, (они оба делают одно и то же), но я спрашиваю, что является более используемый, или же «принято». Кроме того, есть ли разница между этими двумя, когда речь идет о таких вещах, как скорость / производительность?

3

Решение

Разница между этими двумя методами заключается в переносимости:

  • sleep от unistd.h является частью библиотеки C POSIX и поэтому доступен только в системах, которые предоставляют POSIX-API (например, Linux, BSD, …), но, например, не в Windows

  • std::this_thread::sleep_for является частью стандартной библиотеки C ++ (начиная с C ++ 11) и поэтому доступен на всех платформах, которые поддерживают C ++ 11 и новее

Если у вас есть выбор, используйте std::this_thread::sleep_for полагаться только на реализацию C ++ 11, а не на системный API.

6

Другие решения

Основные отличия:

  • std::this_thread::sleep_for является стандартной функцией (начиная с C ++ 11). sleep является стандартной функцией POSIX и доступна только в системах, поддерживающих POSIX.
  • Единица аргументации sleep секунд, в то время как std::this_thread::sleep_for позволяет использовать любой std::chrono::duration (хотя часы, используемые для измерения, будут иметь собственную гранулярность, которая может быть менее точной, чем указанное вами время).
  • Поведение std::this_thread::sleep_for не определяется в отношении сигналов, которые могут влиять на поток программы. Как правило, std::this_thread::sleep_for будет прервана преждевременно так же, как sleep было бы, но не существует простого способа узнать, сколько времени осталось спать. sleep с другой стороны, возвращает время, оставшееся до сна, поэтому легко справляться с прерываниями, используя цикл, который спит до тех пор, пока возвращенное время для сна не станет равным нулю.
3

По вопросам рекламы [email protected]