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의 콜백이 호출됨
콜백 타입 제약
Callback은invocable이어야 하고, 짧은 시간 내 끝나는 것이 권장돼요 (뮤텍스 대기 등 피해야 함).
stop_callback_for_t (C++26)
C++26부터 제네릭 중지 토큰 타입에 맞는 콜백 타입을 얻는 별칭도 생겼어요.
std::stop_callback은 std::jthread·std::stop_source의 협조적 중지에서, 중지 요청 시 정리·알림 동작을 실행하는 데 쓰여요.