線程池 -- 動態鏈接庫

文件

鏈接:https://pan.baidu.com/s/1Y0JutBYsMlwmSjoLcTlkSw
提取碼:j9hn

安裝

這裏給兩種方法。
不弄動態加載庫。

①同項目工程文件夾形式

將資源文件放在當前項目工程文件下,編譯指令:g++ *.cpp -o name -L./ -lPth_Pool //名字自己起

②第三方庫形式

這裏不建議放在系統庫底下,也不建議將頭文件放在系統頭文件目錄下,系統有給我們提供第三方文件夾。
將.so文件放到 /usr/local/lib下,將.h文件放到/usr/local/include下,不然肯定會找不到頭文件。
然後運行指令 ldconfig,刷新系統對第三方庫的紀錄,不然可能會找不到庫。
然後,就可以向使用系統庫一樣使用這個第三方庫。g++ *.cpp -o name -lPth_Pool

庫接口

頭文件:#include<c_pthread_pool.h>

初始化傳參:E_PThread_Pool(int max_count,int min_count,int wait_sec);
傳入最大線程數、最低線程數、線程等待時間。

調度線程:addTask(Task *t);
使用方式:Task是個抽象基類,只有一個默認構造函數、一個析構函數,
以及一個純虛函數virtual int run()=0;

使用時用一個子類繼承,繼承時可在子類構造中添加自己的東西。
繼承子類需要實現run函數。

其他接口不開放,反正你們用不到。

使用示例(僞代碼)

E_PThread_Pool *my_pool = E_PThread_Pool(20,5,5);
DoTask::DoTask(F_Shm &send, I_Packet& packet)
:m_send(&send), m_packet(packet)
{
    //這個類繼承了Tas類
}

int DoTask::run()
{
	//這裏實現自己的動作
    printf("task get data \n");
	return 0;
}

要是需要源代碼可以跟我說一下。

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