c++创建一个线程函数,能够从队列中取出消息数据并进行处理
时间: 2024-02-20 13:58:38 浏览: 21
假设你已经在主函数中创建了一个 `std::queue` 类型的队列 `msgQueue`,并向其中添加了需要处理的消息。你可以创建一个线程函数 `processMsg`,其功能是从队列中取出消息数据并进行处理,代码如下:
```cpp
#include <iostream>
#include <queue>
#include <thread>
// 定义消息类型
struct Message {
int id;
std::string content;
};
// 消息队列
std::queue<Message> msgQueue;
// 线程函数
void processMsg() {
while (true) {
// 队列为空时等待
while (msgQueue.empty()) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
// 取出队首消息并进行处理
Message msg = msgQueue.front();
msgQueue.pop();
// 处理消息
std::cout << "Processing message " << msg.id << ": " << msg.content << std::endl;
// 模拟处理时间
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
int main() {
// 添加一些消息到队列中
msgQueue.push({1, "Hello"});
msgQueue.push({2, "World"});
// 创建线程并开始处理消息
std::thread t(processMsg);
t.detach();
// 主线程继续执行其他任务
std::this_thread::sleep_for(std::chrono::seconds(5));
}
```
这个例子中,线程函数 `processMsg` 会不断从队列中取出消息并进行处理,如果队列为空则会等待一段时间后再次检查。在主函数中,我们向队列中添加了一些消息,并通过 `std::thread` 类创建了一个新线程来处理这些消息。线程执行完成后,主函数会暂停一段时间后退出。