</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,也可以向我索要。

被折叠的 条评论
为什么被折叠?



