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

模版实现的两种方式:

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

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

  1. #ifndef TEMPLATERQUEUE_H
  2. #define TEMPLATERQUEUE_H
  3.  
  4. #include <QQueue>
  5. #include <QMutex>
  6. #include <QMutexLocker>
  7.  
  8. template<class T>
  9. class TemplateRQueue
  10. {
  11. public:
  12. TemplateRQueue();
  13. bool setQueueData(const T tmp);
  14. bool getQueueData(T *tmp);
  15. int getQueueLength();
  16. bool clearQueue();
  17. private:
  18. QQueue<T> *m_pRQueueData;
  19. bool lockFlag;
  20. QMutex m_mutex;
  21.  
  22. };
  23.  
  24. template<class T>
  25. TemplateRQueue<T>::TemplateRQueue()
  26. {
  27. m_pRQueueData = new QQueue<T>;
  28. lockFlag = false;
  29. }
  30.  
  31. template<class T>
  32. bool TemplateRQueue<T>::setQueueData(const T tmp)
  33. {
  34. QMutexLocker locker(&m_mutex);
  35.  
  36. if(lockFlag == true)
  37. return false;
  38. else
  39. {
  40. lockFlag = true;
  41. m_pRQueueData->enqueue(tmp);
  42. lockFlag = false;
  43. return true;
  44. }
  45.  
  46. }
  47.  
  48. template<class T>
  49. bool TemplateRQueue<T>::getQueueData(T *tmp)
  50. {
  51. QMutexLocker locker(&m_mutex);
  52. if(lockFlag == true)
  53. return false;
  54. else
  55. {
  56. lockFlag = true;
  57. if(m_pRQueueData->isEmpty())
  58. {
  59. lockFlag = false;
  60. return false;
  61. }
  62. else
  63. {
  64. *tmp = m_pRQueueData->dequeue();
  65. lockFlag = false;
  66. return true;
  67. }
  68.  
  69. }
  70.  
  71. }
  72.  
  73. template<class T>
  74. int TemplateRQueue<T>::getQueueLength()
  75. {
  76. QMutexLocker locker(&m_mutex);
  77.  
  78. if(lockFlag == true)
  79. return false;
  80. else
  81. {
  82. return m_pRQueueData->length();
  83. }
  84. }
  85.  
  86. template<class T>
  87. bool TemplateRQueue<T>::clearQueue()
  88. {
  89. QMutexLocker locker(&m_mutex);
  90. if(lockFlag == true)
  91. return false;
  92. else
  93. {
  94. m_pRQueueData->clear();
  95. return true;
  96. }
  97. }
  98.  
  99. #endif // TEMPLATERQUEUE_H

C++之通用队列模版的更多相关文章

  1. Linux内核通用队列的使用笔记(读linux内核设计与实现)

    Linux内核通用队列实现 Kfifo位置:kernel/kififo.c 使用需要包含头文件#include <kernel/kififo> 1.创建队列(动态创建)int kfifo_ ...

  2. 【freemaker】之自定义指令通用select模版

    测试代码 @Test public void test08(){ List<Group> groups=Arrays.asList(new Group(1,"山口组") ...

  3. 浏览器插件 - 通用注入模版JS

    //TIP:先通过Tampermonkey编写为可用脚本,再套用此通用模版,再拖到Chrome安装为扩展即可. /* 通用注入原型3:*/ switch (window.location.pathna ...

  4. hdu 2604 Queuing(动态规划—>矩阵快速幂,更通用的模版)

    题目 最早不会写,看了网上的分析,然后终于想明白了矩阵是怎么出来的了,哈哈哈哈. 因为边上的项目排列顺序不一样,所以写出来的矩阵形式也可能不一样,但是都是可以的 //愚钝的我不会写这题,然后百度了,照 ...

  5. 省事之通用Makefile模版

    现在编译方案都偏爱使用cmake解决问题,这两条做unity插件,还是用Makefile,居然忘得光光,好记性不如烂笔头. 后面,翻箱倒柜找到以前为炼金术写的Makefiel,发现还真是挺好用,贴出来 ...

  6. yii2-更改默认显示的通用主页

    在views/layouts/目录下新建一个login.php,然后SiteController中更新下面的方法 public function actionIndex() { $this->l ...

  7. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  8. [js高手之路]javascript腾讯面试题学习封装一个简易的异步队列

    这道js的面试题,是这样的,页面上有一个按钮,一个ul,点击按钮的时候,每隔1秒钟向ul的后面追加一个li, 一共追加10个,li的内容从0开始技术( 0, 1, 2, ....9 ),首先我们用闭包 ...

  9. Erlang运行时中的无锁队列及其在异步线程中的应用

    本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang ...

随机推荐

  1. 在linux下安装tesseract-ocr

    1. 在ubuntu下可以自动安装  [html]   技术分享技术分享    sudo apt-get install tesseract-ocr  2.编译安装    a.编译环境: gcc gc ...

  2. hihoCoder1284机会渺茫(唯一分解定理 + 约分)

    题目链接 #1284 : 机会渺茫 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在追求一名学数学的女生小Z.小Z其实是想拒绝他的,但是找不到好的说辞,于是提出 ...

  3. Saltstack 介绍、安装、配置(一)

    Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/  (介绍各操作系统安装方法) http://repo.sal ...

  4. ASP------如何读取文件内容

    <body> @{ var dataFile = Server.MapPath("~/App_Data/Persons.txt"); Array list = File ...

  5. jquery serialize()方法可以序列化表单值为字符串

    <form> <div><input type="text" name="a" value="1" id=&q ...

  6. JavaWeb学习笔记——JSTL核心标签库

  7. docker快速搭建wordpress(centos7)

    docker pull tutum/wordpress #拉取镜像 docker run -d -p 80:80 tutum/wordpress #运行容器 使用服务器IP访问即可

  8. Ankh不起作用的解决方法

    请检查Visual Studio 2008的Tool > Options... > Source Control,在下拉菜单中选择插件.

  9. Robot Framework--08 List Variables-List变量及其用法

    转自:http://blog.csdn.net/tulituqi/article/details/7907981 一.List变量及其用法 在我们前面几篇文章里用到了很多List变量,相信以后各位也会 ...

  10. yii2 小技巧

    参考地址:http://www.cnblogs.com/sandea/p/5714830.html 1.不通过日志获取AR执行的原生SQL语句和打印变量数据 $query = User::find() ...