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