C++写一个线程函数,在这个函数体内可以控制线程的开启,运行一次,设置运行间隔,连续运行和结束运行
时间: 2024-09-18 20:07:08 浏览: 34
详解C++11 线程休眠函数
在C++中,你可以使用`std::chrono`库来控制线程的睡眠和周期性运行。下面是一个基本的例子,展示了如何编写一个线程函数,允许你控制它的运行、暂停、恢复以及结束:
```cpp
#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
// 控制线程状态的原子变量
std::atomic<bool> run_flag{true};
// 线程函数
void loop_thread(int interval) {
while (run_flag.load()) { // 检查运行标志是否还在
std::this_thread::sleep_for(std::chrono::seconds(interval)); // 按照指定间隔运行
std::cout << "Thread is running at interval of " << interval << " seconds." << std::endl;
}
std::cout << "Thread stopped by user request.\n"; // 结束时通知
}
int main() {
int interval = 5; // 设置运行间隔为5秒
std::thread thread_instance(loop_thread, interval); // 创建并启动线程
thread_instance.detach(); // 让主线程继续执行,不会等待线程结束
// 用户请求暂停或结束
// 示例一:暂停
run_flag.store(false);
// 示例二:结束(需要再次调用run_flag.store(true)重启)
// run_flag.store(false);
return 0;
}
```
在这个示例中,我们创建了一个名为`loop_thread`的线程函数,它会循环地检查`run_flag`原子变量。如果`run_flag`为`true`,则线程会按照指定的间隔运行。当用户通过改变`run_flag`的值为`false`时,线程会被暂停;若想继续,只需再次将其设回`true`即可。
请注意,这里使用的是`detach`函数将线程从当前线程组中分离出来,这意味着主线程将继续执行,而不会阻塞直到线程完成。如果你想让主线程等待线程结束,可以不用`detach`。
阅读全文