글
sleep_for와 sleep_until 함수는 스레드를 일시 중지 시킬 때 사용하는 것입니다.
이 두 함수의 차이는 이름에서 쉽게 알 수 있는데 sleep_for는 특정 시간 동안 일시 중지 시키고 싶을 때(예. 6초 동안 중지) 사용하고, sleep_until는 어떤 시간이 될 때까지(예. 14시10분까지) 중지 시킬 때 사용합니다.
sleep_for와 sleep_until 함수는 thread의 멤버는 아니고 this_thread 네임 스페이스에 속해 있습니다.
< 예제. 8 >
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
std::cout << "sleep_for 테스트 시작" << std::endl;
std::chrono::seconds dura( 3 );
std::chrono::system_clock::time_point StartTime = std::chrono::system_clock::now();
std::this_thread::sleep_for( dura );
std::chrono::system_clock::time_point EndTime = std::chrono::system_clock::now();
std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(EndTime - StartTime);
std::cout << "경과 시간(초)" << sec.count() << std::endl;
std::cout << "sleep_until 테스트 시작" << std::endl;
StartTime = std::chrono::system_clock::now();
std::chrono::seconds dura_sec( 5 );
std::this_thread::sleep_until( StartTime + dura_sec );
EndTime = std::chrono::system_clock::now();
sec = std::chrono::duration_cast<std::chrono::seconds>(EndTime - StartTime);
std::cout << "경과 시간(초)" << sec.count() << std::endl;
}
< 실행 결과 >
yield는 스레드가 자신에게 할당 되어 있는 시간을 포기하고 다른 실행 스레드에게 처리를 양도합니다.
std::this_thread::yield();
댓글
안녕하세요! 너무나 좋은 글 감사드립니다.
혹시 이 반대의 경우는 없을까요? n초동안 중지, 가 아니라 n초동안 실행...같은..
안녕하세요^^
n초 동안 실행은 없습니다. 조건에 따라서 구현하기 좀 까다로울 것 같네요