前言
我们在处理数据接收或发送的时,为避免数据量较多出现顺序混乱或是多线程共享内存造成数据覆盖问题, 经常需要对数据处理做到先进先出(FIFO)。于是我们经常要队列(Queue),顾名思义也就是和平时排队一样,一个一个的处理,遵循先来后到,不插队,不优先。
在C#中,队列封装的很好,使用起来也很方便。它属于系统类的集合(Collection)类中。
一、队列的新建
同其它的类一样,new一下就可以了。注意文件头要加引用Collection。
using System.Collections;
...
Queue q = new Queue();
二、入队
public virtual void Enqueue(object obj)
是入队的函数定义声明可以看到参数是object 类型,也就是基类,所以其它类型都是可以使用的。下面的例子就是以byte数组作为数据实例。
byte[] RxBuf = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//队列加入一个RxBuf字节数组
q.Enqueue(RxBuf);
三、出队
public virtual object Dequeue()
是出队的函数定义声明,返回参数是object 类型,与入队一样,也就是说我们需要做一次强制转换。Count属性就是判断队列中的元素数量。简单理解也就是指还有几个人在排队,没有人排队就不处理了。
//判断队列中元素数量
if (q.Count > 0)
{
byte[] rxData = (byte[]) q.Dequeue();
}
四、清除队列
public virtual void Clear()
是清除的函数定义声明,下面语句是从q队列中移除所有的对象元素。
//队列清除
q.Clear();