• C++之通用队列模版


    功能:在qtcreator上用模版的方式实现队列数据格式存储多样化。

    模版实现的两种方式:    

    1、模版的实现直接在头文件里声明并定义,别的类通过#include"*.h"进行包含,则可以实现调用该类并实例化。

    2、可以在cpp文件里直接定义模版的具体功能,别的类需要调用该类时,只能通过#include"*.cpp"文件, 如果以#include "*.h"方式,则会出错。

    #ifndef TEMPLATERQUEUE_H
    #define TEMPLATERQUEUE_H
    
    #include <QQueue>
    #include <QMutex>
    #include <QMutexLocker>
    
    template<class T>
    class TemplateRQueue
    {
    public:
        TemplateRQueue();
        bool setQueueData(const T tmp);
        bool getQueueData(T *tmp);
        int getQueueLength();
        bool clearQueue();
    private:
       QQueue<T> *m_pRQueueData;
       bool lockFlag;
       QMutex m_mutex;
    
    };
    
    template<class T>
    TemplateRQueue<T>::TemplateRQueue()
    {
        m_pRQueueData = new QQueue<T>;
        lockFlag = false;
    }
    
    template<class T>
    bool TemplateRQueue<T>::setQueueData(const T tmp)
    {
        QMutexLocker locker(&m_mutex);
    
        if(lockFlag == true)
            return false;
        else
        {
            lockFlag = true;
            m_pRQueueData->enqueue(tmp);
            lockFlag = false;
            return true;
        }
    
    }
    
    template<class T>
    bool TemplateRQueue<T>::getQueueData(T *tmp)
    {
        QMutexLocker locker(&m_mutex);
      if(lockFlag == true)
          return false;
      else
      {
          lockFlag = true;
          if(m_pRQueueData->isEmpty())
          {
               lockFlag = false;
               return false;
          }
          else
          {
            *tmp = m_pRQueueData->dequeue();
             lockFlag = false;
             return true;
          }
    
      }
    
    }
    
    
    
    template<class T>
    int TemplateRQueue<T>::getQueueLength()
    {
        QMutexLocker locker(&m_mutex);
    
       if(lockFlag == true)
          return false;
       else
        {
          return m_pRQueueData->length();
        }
    }
    
    
    template<class T>
    bool TemplateRQueue<T>::clearQueue()
    {
        QMutexLocker locker(&m_mutex);
        if(lockFlag == true)
           return false;
        else
        {
           m_pRQueueData->clear();
           return true;
        }
    }
    
    
    
    
    
    
    
    
    #endif // TEMPLATERQUEUE_H
  • 相关阅读:
    dos
    jsf session的获取和添加
    tomcat多开造成的端口占用
    myeclipse中tomcat7内存大小的设置
    中文传值乱码过滤
    java定时器
    jsf中jstl标签<c:forEach/>打印信息
    python基础python函数any()与all()的区别
    C# GetManifestResourceStream获取资源为null
    Linux kill 9 和 kill 15 的区别
  • 原文地址:https://www.cnblogs.com/hzijone/p/5416425.html
Copyright © 2020-2023  润新知