如何实现队列

来源:互联网 发布:ftp命令行用法带端口 编辑:程序博客网 时间:2024/06/11 01:07

</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