Пауза в C ++ - Какой метод? - PullRequest
0 голосов
/ 30 октября 2018

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

Метод 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;
}

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

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

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

  • 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, с другой стороны, возвращает оставшееся время для сна, поэтому легко справляться с прерываниями, используя цикл, который спит до тех пор, пока возвращенное время для сна не станет равным нулю.
0 голосов
/ 31 октября 2018

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

  • 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.

...