单例模式的任务队列
需要的头文件
#include <QQueue>
#include <QMutex>
#include <QMutexLocker>
taskqueue.h文件
#include <QQueue>
#include <QMutex>
#include <QMutexLocker>
#include <QString>
class TaskQueue
{
public :
static TaskQueue* instance()
{
return m_TaskQueue;
}
bool isEmpty();
void pushTask(const QString task);
QString popTask(bool *ok=nullptr);
private:
TaskQueue() = default;
TaskQueue(const TaskQueue& taskQueue) = default;
TaskQueue& operator=(const TaskQueue& taskQueue) = default;
static TaskQueue* m_TaskQueue;
QQueue<QString> m_Tasks;
QMutex m_Mutex;
};
#endif
taskqueue.cpp文件
#include "taskqueue.h"
TaskQueue *TaskQueue::m_TaskQueue = new TaskQueue();
bool TaskQueue::isEmpty()
{
QMutexLocker locker(&m_Mutex);
if(m_Tasks.empty())
return true;
return false;
}
void TaskQueue::pushTask(const QString task)
{
QMutexLocker locker(&m_Mutex);
m_Tasks.enqueue(task);
}
QString TaskQueue::popTask(bool *ok)
{
QMutexLocker locker(&m_Mutex);
QString task;
if(m_Tasks.empty())
{
*ok = false;
}else
{
task = m_Tasks.dequeue();
*ok = true;
}
return task;
}