Я заметил два разных способа «сделать паузу» в 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;
}
Я не спрашиваю, какой путь право, (они оба делают одно и то же), но я спрашиваю, что является более используемый, или же «принято». Кроме того, есть ли разница между этими двумя, когда речь идет о таких вещах, как скорость / производительность?
Разница между этими двумя методами заключается в переносимости:
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.
Основные отличия:
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
с другой стороны, возвращает время, оставшееся до сна, поэтому легко справляться с прерываниями, используя цикл, который спит до тех пор, пока возвращенное время для сна не станет равным нулю.