發一個C++寫的跨平臺的BlockingQueue

BlockingQueue大家都不陌生吧,它簡化了多線程的開發,常用於生產者-消費者模式。可惜只有java這些高級語言才提供。我參考了網上的跨平臺線程類,寫了個跨平臺的BlockingQueue,希望對大家有幫助。

下載地址:http://download.csdn.net/source/2052785

使用方法:

Linux下請切換到目錄,make即可。(Makefile還不太熟悉,湊合着能用就行)

Windows下請用VS2005以上版本打開sln文件即可。

bin目錄下有編譯好的測試實例

==============================================================

未提供打包成庫文件的命令,有需要者可自行打包。

測試代碼(WIN32版)

#include "NetWay/BlockingQueue.h"
#include <iostream>
#include <string>
#include <windows.h>


using namespace std;

NetWay::BlockingQueue<string> bq;

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
	int* n = (int *)lpParam;
	printf("Thread %d is waiting/n",n);
	string str = bq.take();
	printf("Thread %d got an element:%s /n",n,str.c_str());

	return 0;
}

void main()
{	
	DWORD dlen;
	for(int i = 0; i < 5; i++)
	{
		CreateThread(NULL,0,ThreadFunc,(LPVOID)i,0,&dlen);
	}

	Sleep(2*1000);  // all threads are waiting.
	
	bq.enqueue("1");
	bq.enqueue("2");
	bq.enqueue("3");

	Sleep(3*1000); // still 2 threads are waiting.

	bq.enqueue("4");

	Sleep(2*1000); // only 1 thread is waiting

	printf("now the main thread is trying to poll an element/n");

	try 
	{
		bq.poll(3*1000);
	}catch(...)
	{
		printf("poll time out.");
	}

	cin>>dlen;

}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章