std::thread 创建线程终止线程范例代码
时间: 2024-09-24 18:20:12 浏览: 39
在C++中,`std::thread` 是用于创建和管理线程的库的一部分。如果你想创建一个新的线程并能够终止它,你可以这样做:
```cpp
#include <iostream>
#include <thread>
#include <atomic> // 使用原子标志来控制线程的退出
// 定义一个函数作为新线程的任务
void thread_function() {
while (!thread_should_stop) { // 假设thread_should_stop是一个原子标志
std::cout << "Thread is running...\n";
// ... 这里放你要线程执行的具体操作
std::this_thread::sleep_for(std::chrono::seconds(1)); // 线程暂停一段时间
}
std::cout << "Thread stopped by request.\n";
}
int main() {
std::atomic<bool> thread_should_stop(false); // 创建一个共享的布尔标志,用于通知线程停止
// 创建新的线程
std::thread worker(thread_function);
// 等待一段时间...
for (int i = 0; i < 5 && !thread_should_stop.load(); ++i) {
std::cout << "Main thread: waiting for the worker to finish...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
// 如果需要,设置标志告诉线程停止
if (!thread_should_stop.compare_exchange_strong(false, true)) {
std::cout << "Main thread: Thread was already stopping.\n";
}
// 等待线程结束
worker.join();
return 0;
}
```
在这个例子中,我们创建了一个线程`worker`来执行`thread_function`函数。我们使用一个原子标志`thread_should_stop`来控制线程的生命周期。当主线程想要停止工作时,它会改变这个标志的值。线程会在循环检查这个标志,如果变为`true`,就停止运行。
注意,`compare_exchange_strong`函数用于原子地更新标志并检查是否成功,这是为了防止其他线程在我们更改标志的同时修改它。
阅读全文