stop_callback — std::stop_callback

stop_callback — std::stop_callback

std::stop_callback 클래스 템플릿은 연관 std::stop_token 객체에 콜백 함수를 등록하는 RAII 객체 타입을 제공해요. C++20에서 도입됐어요. <stop_token> 헤더에 있어요.

중지 요청이 발생하면 등록된 콜백이 호출돼요.

출처: cppreference

본문

// <stop_token> 헤더, C++20
template< class Callback >
class stop_callback;

사용 예

#include <stop_token>
#include <iostream>

void worker(std::stop_token st) {
    // 중지 요청 시 호출될 콜백 등록
    std::stop_callback cb(st, [] {
        std::cout << "stop requested!\n";
    });

    while (!st.stop_requested()) {
        // 작업 수행
    }
}

int main() {
    std::jthread t(worker);
    // ... 잠시 후
    t.request_stop();   // 콜백 호출됨
}

동작

  • 생성 시 콜백을 토큰에 등록하고, 소멸 시 등록을 해제해요 (RAII).
  • 토큰에 이미 중지 요청이 있으면, 콜백은 생성 즉시(동기적으로) 호출될 수 있어요.
  • 콜백은 일회성으로 호출돼요.
std::stop_source source;
std::stop_callback cb(source.get_token(), [] { /* ... */ });
source.request_stop();   // cb의 콜백이 호출됨

콜백 타입 제약

  • Callbackinvocable이어야 하고, 짧은 시간 내 끝나는 것이 권장돼요 (뮤텍스 대기 등 피해야 함).

stop_callback_for_t (C++26)

C++26부터 제네릭 중지 토큰 타입에 맞는 콜백 타입을 얻는 별칭도 생겼어요.

std::stop_callbackstd::jthread·std::stop_source의 협조적 중지에서, 중지 요청 시 정리·알림 동작을 실행하는 데 쓰여요.

더 알아보기 (Learn more)

cppreference