mfc线程安全队列怎么定义
时间: 2023-08-31 09:05:57 浏览: 140
在MFC中,你可以使用C++11标准库中提供的线程安全队列std::queue和std::deque,需要在项目属性中开启“使用C++11标准”选项。
定义一个线程安全队列可以使用如下代码:
```cpp
#include <queue>
#include <mutex>
template <typename T>
class ThreadSafeQueue
{
public:
ThreadSafeQueue() {}
void push(const T& value)
{
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(value);
}
bool empty() const
{
std::lock_guard<std::mutex> lock(mutex_);
return queue_.empty();
}
bool try_pop(T& value)
{
std::lock_guard<std::mutex> lock(mutex_);
if (queue_.empty())
{
return false;
}
value = std::move(queue_.front());
queue_.pop();
return true;
}
private:
mutable std::mutex mutex_;
std::queue<T> queue_;
};
```
这里使用了模板类ThreadSafeQueue来封装了一个线程安全的队列,其中mutex_是一个互斥锁,queue_是一个std::queue类型的队列。push函数用来向队列中添加元素,empty函数用来判断队列是否为空,try_pop函数用来从队列中取出元素,如果队列为空则返回false。
在使用时,你可以创建一个ThreadSafeQueue对象来存储数据,例如:
```cpp
ThreadSafeQueue<int> queue;
queue.push(1);
queue.push(2);
int value;
if (queue.try_pop(value))
{
// 处理取出的value
}
```
需要注意的是,std::queue和std::deque的线程安全版本std::queue<std::mutex>只是提供了基本的线程安全保障,如果需要更高级的线程安全操作,可以考虑使用其他的线程安全数据结构,例如boost::lockfree::queue。
阅读全文