SW/C++

C++ : 쓰레드 : sleep_for(), yield() : 개념, 예제, 사용 방법

얇은생각 2020. 3. 19. 07:30
반응형

C++ 쓰레드

 

std::this_thread

현재 쓰레드에 적용되는 도우미 함수들이 있습니다.

get_id(), sleep_for(), sleep_until(), yield()

 

 

 

std::this_thread::sleep_for()

최소 sleep_duration 만큼의 시간 동안 현재 쓰레드의 실행을 멈춥니다.

 

 

 

예제

#include <iostream>
#include <chrono>
#include <string>
#include <thread>

void PrintCurrentTime() {
    // 현재 시간 출력
}

void PrintMessage(const std::string& message)
{
    std::cout << "Sleep now ... ";
    PrintCurrentTime();
    
    std::this_thread::sleep_for(std::chrono::seconds(3));

    std::cout << message << " ";
    PrintCurrentTime();
}
int main()
{
    std::thread thread(PrintMessage, "Message from a child thread.");

    PrintMessage("Message from a main thread.");

    thread.join();

    return 0;
}

 

 

 

std::this_tread::yield();

sleep과 비슷하나, sleep이 쓰레드를 일시 정지 상태로 바꾸는 반면, yield는 계속 실행 대기 상태를 유지합니다.

 

 

 

예제

#include <iostream>
#include <chrono>
#include <string>
#include <thread>

void PrintMessage(const std::string& message, std::chrono::seconds delay)
{
    auto end = std::chrono::high_resolution_clock::now() + delay;

    while (std::chrono::high_resolution_clock::now() < end)
    {
        std::this_thread::yield();
    }

    std::cout << message << std::endl;
}

int main()
{
    std::thread thread(PrintMessage, "Message from a child thread.", std::chrono::seconds(3));

    PrintMessage("Message from a main thread.", std::chrono::seconds(2));

    thread.join();

    return 0;
}
반응형