task manager memory meaning

本文解释了Windows任务管理器中内存列的具体含义,帮助用户理解各进程的内存使用情况,包括工作集、峰值工作集等关键指标。
// 任务管理器类 class ParallelTaskManager { public: ParallelTaskManager() : progress(0), stopFlag(false) {} // 注册成员函数任务 template <typename Class, typename Func> void addTask(Class* obj, Func func) { std::lock_guard<std::mutex> lock(tasksMutex); // 封装成员函数为可调用对象 tasks.emplace_back([this, obj, func] { this->executeWrapper(obj, func); }); } // 执行所有任务 void executeAll() { std::vector<std::thread> workers; // 启动任务线程 for (auto& task : tasks) { workers.emplace_back([this, &task] { task(); // 执行封装的成员函数 }); } // 等待任务线程完成 for (auto& t : workers) { t.join(); } } // 获取最终状态 int getFinalState() const { return progress.load(); } private: // 成员函数执行包装器 template <typename Class, typename Func> void executeWrapper(Class* obj, Func func) { try { // 调用成员函数 (obj->*func)(stopFlag); // 检查是否被其他任务终止 if (stopFlag.load()) return; // 成功完成,更新进度 { std::lock_guard<std::mutex> lock(progressMutex); progress.fetch_add(1); } cv.notify_one(); } catch (...) { // 任务失败处理 setFailedState(); } } // 设置失败状态 void setFailedState() { // 使用CAS确保只有一个任务设置失败状态 int expected = progress.load(); while (expected >= 0 && !progress.compare_exchange_weak(expected, -1)) {} // 设置全局终止标志 stopFlag.store(true); cv.notify_all(); } public: // 进度监控函数 void progressMonitor() { std::unique_lockstd::mutex lock(progressMutex); int lastProgress = progress; while (true) { // 等待状态变化或终止信号 cv.wait(lock, [this, &lastProgress] { return progress != lastProgress || progress == -1 || progress == tasks.size() || stopFlag; }); int current = progress.load(); // 更新进度显示(实际项目中替换为UI更新) if (current == -1) { std::cout << "[错误] 任务执行失败!" << std::endl; break; } else if (current == tasks.size()) { std::cout << "[成功] 所有任务完成!" << std::endl; break; } else { lastProgress = progress; std::cout << "进度更新: " << current << "/" << tasks.size() << std::endl; } // 检查终止条件 if (stopFlag.load() || progress == -1 || progress == tasks.size()) { break; } } } private: // 任务列表(封装成员函数的lambda) std::vector<std::function<void()>> tasks; std::mutex tasksMutex; // 进度状态 std::atomic<int> progress; std::mutex progressMutex; std::condition_variable cv; // 终止标志 std::atomic<bool> stopFlag; public: std::thread monitor; }; // ============= 示例任务类 ============= class DataProcessor { public: void process(std::atomic& stopFlag) { std::random_device rd; std::mt19937 gen(rd()); for (int i = 0; i < 8; ++i) { if (stopFlag.load()) return; // 检查终止 // 模拟数据处理 std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 模拟15%失败率 if (gen() % 100 < 15) { throw std::runtime_error("数据处理错误"); } } } }; class NetworkService { public: void fetchData(std::atomic& stopFlag) { std::random_device rd; std::mt19937 gen(rd()); for (int i = 0; i < 5; ++i) { if (stopFlag.load()) return; // 模拟网络请求 std::this_thread::sleep_for(std::chrono::milliseconds(1500)); // 模拟网络错误 if (gen() % 100 < 1) { throw std::runtime_error("网络连接失败"); } } } }; class FileSystem { public: void loadFiles(std::atomic& stopFlag) { std::random_device rd; std::mt19937 gen(rd()); for (int i = 0; i < 10; ++i) { if (stopFlag.load()) return; // 模拟文件加载 std::this_thread::sleep_for(std::chrono::milliseconds(80)); } } }; int main() { // 创建任务类的实例 DataProcessor processor; NetworkService network; FileSystem fileSys; // 创建任务管理器 ParallelTaskManager manager; // 启动监控线程 manager.monitor = std::thread(&ParallelTaskManager::progressMonitor,&manager); // 注册不同类的成员函数作为任务 manager.addTask(&processor, &DataProcessor::process); manager.addTask(&network, &NetworkService::fetchData); manager.addTask(&fileSys, &FileSystem::loadFiles); std::cout << "开始执行并行任务..." << std::endl; manager.executeAll(); // 获取最终状态 int result = manager.getFinalState(); if (result == -1) { std::cout << "最终状态: 任务失败" << std::endl; } else { std::cout << "最终状态: " << result << "/3 任务成功" << std::endl; } // 通知监控线程退出 manager.monitor.join(); return 0; } 为什么cv.notify_one();时进不去监控线程?
最新发布
10-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值