如何实现队列

</pre>队列就是先进先出的。这个在数据结构这门课里面就写的很清楚了,但是队列在实际项目中有什么用途呢?windows系统是基于消息建立起来的系统,所以在大部分应用程序里都要处理消息发送消息,所以消息队列是个很好的用途,下面的程序就使用队列来发送串口数据,避免了等待串口造成的延迟。<p></p><p></p><pre name="code" class="cpp">#include <vector>
using namespace  std;
#include "Serial.h"
class queque{

private:
	vector<string> m_capcity;
	CSerial m_serial;
	bool m_bRun ;
private:
	//辅助线程
	static unsigned int __stdcall FuncDealThread(void* pParam);	
public:
	//异步向串口中写入数据
	void writeData(string &str);
	queque();//构造
	~queque();
};

这是队列的头文件,辅助线程的作用是隔一段时间就查询队列中有没有数据,有数据就通过串口发送出去,没有的话就挂起线程。写入数据的函数就是向队列中添加数据,下面的cpp文件是具体的实现

#include "queque.h"
#include <process.h>
void queque::writeData( string &str )
{
	m_capcity.push_back(str);
}

unsigned int __stdcall queque::FuncDealThread( void* pParam )
{
	queque * q = (queque*)pParam;
	while(q->m_bRun)
	{
		if(q->m_capcity.size() ==0)//没有数据
		{
			Sleep(1000);
			continue;
		}else
		{			
			string  &str = q->m_capcity.front();
			q->m_serial.Write(str.c_str(),str.size(),NULL,NULL,200);;
			q->m_capcity.pop_back();
		}
	}
	return 0;
}

queque::queque()
{
	m_serial.Open("COM4",0,0,true);
	_beginthreadex(0, 0, &FuncDealThread, this, 0, 0);
}

queque::~queque()
{
	m_bRun = true;
	m_serial.Close();//关串口
}

这个队列的实现主要是利用多线程来实现,辅助线程负责处理这个队列。下面的main函数来不停的向队列里写东西。

#include <Windows.h>
#include <iostream>
#include "queque.h"
void main()
{
	queque q ;
	while(1){
		string str="hello\n";
		q.writeData(str);
		Sleep(300);
	}
}
扩展:把队列的字符串换成message就变成了消息队列。

起始没有什么难的,只是你知不知道。工程的下载地址:

http://www.pudn.com/detail.asp?id=2595305,也可以向我索要。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值