如何实现队列
</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();
};
這個隊列的實現主要是利用多線程來實現,輔助線程負責處理這個隊列。下面的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就變成了消息隊列。
這是隊列的頭文件,輔助線程的作用是隔一段時間就查詢隊列中有沒有數據,有數據就通過串口發送出去,沒有的話就掛起線程。寫入數據的函數就是向隊列中添加數據,下面的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,也可以向我索要。
總結
- 上一篇: WLAN和E-UTRAN小区重选
- 下一篇: IRAT Iu Handover (UT