C ++ 프로그램에 시간 지연을 추가하려고하는데, 누군가 내가 시도 할 수있는 것에 대한 제안이나 내가 볼 수있는 정보가 있는지 궁금합니다.
이 시간 지연을 구현하는 방법에 대한 자세한 내용을 알고 싶지만, 시간 지연을 추가하는 방법에 대한 자세한 정보를 얻을 때까지이를 구현하려고 시도해야할지 확신 할 수 없습니다.
답변
답변
C ++ 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);
이것은 또한 3 초 동안 잠을 자게됩니다. 하지만 숫자를 조금 더 다듬을 수 있습니다.
답변
다음과 같이 간단한 것을 원하십니까?
#include <unistd.h>
sleep(3);//sleeps for 3 second
답변
이것은 스레드가 휴면하는 시간이 휴면 기간에 가깝다는 것을 보장하지 않으며 스레드가 실행을 계속하기 전의 시간이 최소한 원하는 양이 될 것임을 보장 할뿐입니다. 실제 지연은 상황 (특히 문제의 기계에 가해지는 부하)에 따라 다르며 원하는 절전 시간보다 훨씬 더 높을 수 있습니다.
또한 수면이 필요한 이유를 나열하지 않지만 일반적으로 동기화 방법으로 지연을 사용하지 않아야합니다.
답변
이 코드 조각을 시도해 볼 수 있습니다.
#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));
}
답변
마이크로 초 정밀도를 원하는 경우 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);
}
`