测试下c++ 20的jthread。代码:
cpp
void testJThread(void) {
auto worker = [](std::stop_token st) { // 第一个参数是在线程内部自动传参的,也可以不要这个参数。
while (!st.stop_requested()) // 查询停止标记
{
std::cout << "子线程运行中..." << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(400));
}
std::cout << "子线程检测到停止请求,主动退出循环,return" << std::endl;
};
{
std::jthread jth(worker);
std::cout << "当前线程:sleep 1秒,子线程继续" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
} // 测试离开作用域,该线程对象执行析构函数
// 析构函数中自动调用request_stop() 置停止标记, 并自动调用join() 阻塞
// 也可以不这样, 手动调用request_stop()发停止信号
std::cout << "jthread 析构完成,回到主线程\n";
}
运行:

ok. jthread有内置停止标记。 而且析构会自动调用停止。