这得看你使用的缓存的具体目的了。 使用队列大体是这样的,个人想法,我在项目中是这样写的。 我做了一个数据采集卡的封装程序,启动一个线程每1.6ms从卡上获取3456个点,大约循环读取8000次。 然后有一个线程处理每一次获取的数据,做到实时显示。 /// <summary> /// 存取采集卡行数据的队列类 /// </summary> class CDataQueue { private static object dataObj = new object(); private static Queue<ushort[]> data_que = new Queue<ushort[]>(5000); public Queue<ushort[]> DATA_QUE { get { lock (dataObj) { return data_que; } } set { lock (dataObj) { data_que = value; } } } }在程序中这样: CDataQueue dataQue = new CDataQueue(); 线程1:从采集卡取数据: private void snapData() { //using a cycle to get line data //do something about snaping line datas. dataQue.DATA_QUE.Enqueue(my line data)保存数据 } 线程2:显示数据 private void showData() { //using a cycle to show line data if(dataQue.DATA_QUE.count > 0) { dataQue.DATA_QUE.deQueue();出队列 using the queue data } }
这得看你使用的缓存的具体目的了。
使用队列大体是这样的,个人想法,我在项目中是这样写的。
我做了一个数据采集卡的封装程序,启动一个线程每1.6ms从卡上获取3456个点,大约循环读取8000次。
然后有一个线程处理每一次获取的数据,做到实时显示。
/// <summary>
/// 存取采集卡行数据的队列类
/// </summary>
class CDataQueue
{
private static object dataObj = new object();
private static Queue<ushort[]> data_que = new Queue<ushort[]>(5000);
public Queue<ushort[]> DATA_QUE
{
get
{
lock (dataObj)
{
return data_que;
}
}
set
{
lock (dataObj)
{
data_que = value;
}
}
} }在程序中这样:
CDataQueue dataQue = new CDataQueue();
线程1:从采集卡取数据:
private void snapData()
{
//using a cycle to get line data
//do something about snaping line datas.
dataQue.DATA_QUE.Enqueue(my line data)保存数据
}
线程2:显示数据
private void showData()
{
//using a cycle to show line data
if(dataQue.DATA_QUE.count > 0)
{
dataQue.DATA_QUE.deQueue();出队列
using the queue data
}
}