-
大小: 64KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-07
- 語言: 其他
- 標(biāo)簽: ThreadPool??
資源簡(jiǎn)介
Windows下比較完美線程池的升級(jí)版,加入了我對(duì)線程池能想到的幾乎所有功能,而且更改了第一版本的一些Bug,并進(jìn)行了效率的優(yōu)化。
第一版的介紹地址:http://blog.csdn.net/fishjam/article/details/8632049
功能列表如下:
1.能自動(dòng)根據(jù)任務(wù)和線程的多少在 最小/最大 線程個(gè)數(shù)之間調(diào)整(Vista后的系統(tǒng)有 SetThreadpoolThreadMaximum 等函數(shù)有類似功能),現(xiàn)已支持動(dòng)態(tài)改變最小、最大值。
2.可以設(shè)置等待Job的最大個(gè)數(shù),并在加入Job時(shí),隊(duì)列滿了的話,可以設(shè)置等待超時(shí)并根據(jù)返回值進(jìn)一步處理
3.能方便的對(duì)任一任務(wù)進(jìn)行取消,如任務(wù)尚未運(yùn)行則由框架代碼處理,如任務(wù)已經(jīng)運(yùn)行,則需要 JobBase 的子類根據(jù) GetJobWaitType 的返回值進(jìn)行處理
4.能對(duì)單個(gè)Job或整個(gè)線程池進(jìn)行 暫停、繼續(xù)、停止 處理 -- 需要 JobBase 的子類根據(jù) GetJobWaitType 的返回值進(jìn)行處理
5.支持回調(diào)方式的反饋通知( Progress/Error 等)
6.使用模版方式實(shí)現(xiàn),能方便的進(jìn)行參數(shù)傳遞
7.在加入任務(wù)時(shí)可以設(shè)置優(yōu)先級(jí),現(xiàn)已支持動(dòng)態(tài)調(diào)整優(yōu)先級(jí)
8.使用的是微軟的基本API,能支持WinXP、Vista、Win7等各種操作系統(tǒng)(CreateThreadpoolWork 等只能在Vista后才能使用)
9.可以有多個(gè)實(shí)例,方便進(jìn)行控制(QueueUserWorkItem 等是單實(shí)例)
10.采用的是對(duì)稱模式的線程池(沒有管理線程),運(yùn)行成本低

代碼片段和文件信息
//?FTLDemo.cpp?:?定義應(yīng)用程序的類行為。
//
#include?“stdafx.h“
#include?“FTLDemo.h“
#include?“FTLDemoSheet.h“
//#include?
//#include?
//#include?
//#include?
//#include?“vld.h“
//#include?
#ifdef?_DEBUG
#define?new?DEBUG_NEW
#endif
//?CFTLDemoApp
BEGIN_MESSAGE_MAP(CFTLDemoApp?CWinApp)
ON_COMMAND(ID_HELP?&CWinApp::onhelp)
END_MESSAGE_MAP()
//?CFTLDemoApp?構(gòu)造
CFTLDemoApp::CFTLDemoApp()
{
//?將所有重要的初始化放置在?InitInstance?中
}
//?唯一的一個(gè)?CFTLDemoApp?對(duì)象
CFTLDemoApp?theApp;
//CComModule?_Module;?????//為了使用CFResourcelessDlg
//?CFTLDemoApp?初始化
BOOL?CFTLDemoApp::InitInstance()
{
????//FUNCTION_BLOCK_INIT();
????BOOL?bRet?=?FALSE;
????CoInitializeEx(NULL?COINIT_APARTMENTTHREADED);
????{
FUNCTION_BLOCK_TRACE(0);
????????//VLDEnable();
????????//FAST_TRACE_OPTIONS?traceOptions;
????????//traceOptions.traceThreshold?=?tlTrace;
????????//traceOptions.bWriteToFile?=?TRUE;
????????//FTL::CFFastTrace::GetInstance().SetTraceOptions(&traceOptions);
????????//?如果一個(gè)運(yùn)行在?Windows?XP?上的應(yīng)用程序清單指定要
????????//?使用?ComCtl32.dll?版本?6?或更高版本來啟用可視化方式,
????????//則需要?InitCommonControlsEx()。否則,將無法創(chuàng)建窗口。
????????INITCOMMONCONTROLSEX?InitCtrls;
????????InitCtrls.dwSize?=?sizeof(InitCtrls);
????????//?將它設(shè)置為包括所有要在應(yīng)用程序中使用的
????????//?公共控件類。
????????InitCtrls.dwICC?=?ICC_WIN95_CLASSES;
????????InitCommonControlsEx(&InitCtrls);
????????CWinApp::InitInstance();
????????AfxEnableControlContainer();
????????//FTL::CFFileUtil::DumpAllAPISystemFolderPath();
????????//?標(biāo)準(zhǔn)初始化
????????//?如果未使用這些功能并希望減小
????????//?最終可執(zhí)行文件的大小,則應(yīng)移除下列
????????//?不需要的特定初始化例程
????????//?更改用于存儲(chǔ)設(shè)置的注冊(cè)表項(xiàng)
????????SetRegistryKey(_T(“Fishjam“));
//FTL::CFCrashHandler?crashHandler;
????????//crashHandler.SetDefaultCrashHandlerFilter();
????????//FTL::CFAutoGdiplus???gdiPlusInitobject;
????????//FTL::CFWinsockEnvInit?winsockInit;
????????//CFTLDemoDlg?dlg;
????????//m_pMainWnd?=?&dlg;
????????//INT_PTR?nResponse?=?dlg.DoModal();
????????CFTLDemoSheet?sheet(TEXT(“FTL?Demo“));
????????INT_PTR?nResponse??=?sheet.DoModal();
????????if?(nResponse?==?IDOK)
????????{
????????}
????????else?if?(nResponse?==?IDCANCEL)
????????{
????????}
????????//?由于對(duì)話框已關(guān)閉,所以將返回?FALSE?以便退出應(yīng)用程序,
????????//??而不是啟動(dòng)應(yīng)用程序的消息泵。
????}
????CoUninitialize();
????//FUNCTION_BLOCK_UNINIT();
????return?FALSE;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????2620??2015-12-29?21:36??FTLDemo.cpp
?????文件?????????482??2014-06-24?20:21??FTLDemo.h
?????文件???????38902??2016-01-18?23:14??FTLDemo.rc
?????文件????????1233??2015-12-29?21:25??FTLDemo.sln
?????文件???????21504??2016-01-18?23:17??FTLDemo.suo
?????文件????????9944??2015-12-29?21:42??FTLDemo.vcproj
?????文件????????2916??2015-12-29?21:27??FTLDemoSheet.cpp
?????文件????????1050??2015-05-24?17:38??FTLDemoSheet.h
?????文件????????2613??2015-12-29?21:45??ftlFake.h
?????文件??????????85??2013-03-03?15:34??ftlThread.cpp
?????文件????????3954??2013-03-03?15:38??ftlThread.h
?????文件???????18225??2015-12-29?21:50??ftlThreadPool.h
?????文件???????38094??2015-12-29?21:46??ftlThreadPool.hpp
?????文件????????2891??2014-06-24?20:21??ReadMe.txt
?????目錄???????????0??2015-12-29?21:51??res\
?????文件???????21630??2014-06-24?20:21??res\FTLDemo.ico
?????文件?????????363??2014-06-24?20:21??res\FTLDemo.rc2
?????文件???????15064??2015-12-19?16:24??resource.h
?????文件?????????166??2015-12-29?21:35??stdafx.cpp
?????文件????????2339??2015-12-29?21:40??stdafx.h
?????文件????????1739??2015-12-29?21:36??ThreadPage.h
?????文件???????16723??2015-12-29?21:42??ThreadPoolPage.cpp
?????文件????????3963??2015-12-29?21:36??ThreadPoolPage.h
評(píng)論
共有 條評(píng)論