各位观众,大家好!今天咱们来聊聊C++异步任务取消这档子事儿。这玩意儿听起来高大上,其实就是告诉你的程序:“喂,别忙活了,停下!咱换个活儿干!”
取消异步任务,是个非常现实的需求。想象一下:你打开一个网页,页面开始加载,结果网速慢得像蜗牛爬。你一怒之下点了刷新,或者干脆关了页面。如果程序不知道你已经取消了操作,还在吭哧吭哧地加载,那得多浪费资源啊!
C++标准本身并没有提供直接的、一劳永逸的异步任务取消机制。这就意味着,我们需要自己动手,丰衣足食。咱们今天就来看看两种常见的实现方式:手动实现和协作式取消。
第一种:手动实现,简单粗暴但有效
手动实现,顾名思义,就是你自己用一些标志位、条件变量等工具,来控制异步任务的生命周期。这方法简单直接,但也需要你对代码有足够的掌控力。
#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
// 模拟一个耗时任务
void long_running_task(std::atomic<bool>& stop_flag) {
for (int i = 0; i < 100; ++i) {
// 检查是否需要停止
if (stop_flag.load()) {
std::cout << "任务被取消!在迭代 " << i << " 处停止。n";
return; // 提前结束函数
}
std::cout