C++写一个线程函数,另外的函数可以控制线程的开启,运行一次,设置运行间隔,连续运行和结束运行
时间: 2024-09-18 15:06:48 浏览: 37
在C++中,你可以使用`std::thread`和`std::condition_variable`来创建和管理线程。下面是一个简单的示例,展示了如何编写一个基础的线程函数,以及提供一些控制操作的方法:
首先,我们定义一个线程函数(这里假设名为`runTask`),它会无限循环直到收到信号停止:
```cpp
#include <iostream>
#include <thread>
#include <condition_variable>
void runTask(std::condition_variable& cv, std::mutex& mtx) {
while (true) {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{return shouldStop;}); // 假设shouldStop是一个全局变量或通过其他方式控制
// 这里放置你要线程执行的任务
std::cout << "Thread running...\n";
std::this_thread::sleep_for(std::chrono::seconds(5)); // 设置5秒运行间隔
}
}
```
然后,你可以在一个主函数或其他地方创建这个线程,并提供控制它的工具:
```cpp
int main() {
std::condition_variable cv;
std::mutex mtx;
bool shouldRun = true;
std::thread workerThread(runTask, std::ref(cv), std::ref(mtx));
// 控制线程开启、暂停、恢复、停止
while (shouldRun) {
std::cout << "Start/Resume thread\n";
std::lock_guard<std::mutex> lock(mtx);
cv.notify_one(); // 开始运行
std::this_thread::sleep_for(std::chrono::seconds(1)); // 暂停1秒后检查是否需要停止
}
std::cout << "Stopping thread...\n";
shouldStop = true; // 设置停止标志
cv.notify_all(); // 结束任务并唤醒等待的线程
workerThread.join(); // 等待线程结束
return 0;
}
```
在这个例子中,你可以通过改变`shouldRun`变量的值来控制线程的运行状态,`cv.notify_one()`用于开始任务,`cv.notify_all()`用于通知线程停止。
阅读全文