QT中 C++ STL 模板类queue的使用

个人的应用背景:两个线程之间需要数据传输,单向数据发送,一个线程从底层接口拿数据,另一线程需要那到这个数据进行解析应用,之前使用方法很简单直接直接设置使用一个全局变量,使用上进行了互斥的处理,后续出现了数据解析的线程出现数据处理不及时出现丢帧的情况,所以使用队列数据结构,一般在单片机嵌入式应用时可以自己写一个简单的队列,这个我以前也做过,由于QT支持C++ 的STL,所以直接使用STL中的queue的数据结构,下面介绍使用方法:

1、需要包含头文件

#include<queue>   /* 不可以使用queue.h */

2、指明使用的命名空间 不然无法使用

using namespace std;

3、 示例代码

定义queue 对象的应用代码如下:


queue<CAN_J1939_MESSAGE>  _Rev_Queue; /* 定义数据 数据尾部添加数据 */

/*  入队操作 */


CAN_J1939_MESSAGE_Rev_Queue.push(this->Charger_data); 

/*  出队操作 */


if(!CAN_J1939_MESSAGE_Rev_Queue.empty())   /* 判断数据是否为空 */


{

J1939CAN_buf_data = CAN_J1939_MESSAGE_Rev_Queue.front();/* 从数据头 提取数据 */

CAN_J1939_MESSAGE_Rev_Queue.pop();                                 /*  数据头的数据弹出  */

}

上面是我使用到的几个方法 ,可能在加一个 size()方法获取数据个数就可以了,

4、总结

不知道是出于什么考虑出队的pop方法竟然不能直接获取到数据,明显增加了一个操作。

另外还有一个方法是获取队列的最后进入的元素 back();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容