乙個執行緒池的設計需要的幾個東西:
執行緒池管理器:負責執行緒池的建立,管理和維護,執行緒池的終止。
工作執行緒:實際就是執行緒介面和執行緒管理的
任務佇列:用於儲存需要執行的任務,實際是乙個列表
執行緒介面:乙個執行緒函式的實現(在此為,還不知道還有沒有乙個更好的實現)
任務介面:需要使用執行緒池的中的執行緒處理的任務都需要繼承於此介面。
乙個簡單的邏輯就是:
工作執行緒,執行緒介面
任務介面和執行緒函式:
#ifndef __thread_h__
#define __thread_h__
#include #include #include class runnable
; virtual void run() = 0;
};class cthread : public runnable
;#endif
實現:
#include "stdafx.h"
#include "thread.h"
cthread::cthread(void) :
m_prunnable(null),
m_brun(false)
cthread::~cthread(void)
cthread::cthread(runnable * prunnable) :
m_threadname(""),
m_prunnable(prunnable),
m_brun(false)
cthread::cthread(const char * threadname, runnable * prunnable) :
m_threadname(threadname),
m_prunnable(prunnable),
m_brun(false)
cthread::cthread(std::string threadname, runnable * prunnable) :
m_threadname(threadname),
m_prunnable(prunnable),
m_brun(false)
bool cthread::start(bool bsuspend)
if(bsuspend)
else
m_brun = (null != m_handle);
return m_brun;
}void cthread::run()
if(null != m_prunnable)
m_brun = false;
}void cthread::join(int timeout)
if(timeout <= 0)
::waitforsingleobject(m_handle, timeout); //
}void cthread::resume()
::resumethread(m_handle); //
}void cthread::suspend()
::suspendthread(m_handle); //
}bool cthread::terminate(unsigned long exitcode)
if(::terminatethread(m_handle, exitcode)) //
return false;
}unsigned int cthread::getthreadid()
std::string cthread::getthreadname()
void cthread::setthreadname(std::string threadname)
void cthread::setthreadname(const char * threadname)
else }
unsigned int cthread::staticthreadfunc(void * arg)
執行緒池的使用
簡而言之 兩個類 執行緒池的 類 public class threadpoolproxyfactory return mnormalthreadpoolproxy return public static threadpoolproxy createdownloadthreadpoolproxy ...
執行緒池的使用
執行緒池能幫助我們有效的管理執行緒,避免重複的建立銷毀執行緒。newfixedthreadpool 固定執行緒數量的執行緒池 newsinglethreadexecutor 返回乙個只有乙個執行緒的執行緒池 newcachedthreadpool 返回乙個可根據實際情況調整執行緒數量的執行緒池 ne...
執行緒池的使用
如果在使用執行緒的時候就去建立乙個新執行緒,當併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,系統在建立和銷毀執行緒上花費的時間和消耗的系統資源都相當大,甚至要比處理任務的時間和資源要多的多,同時活動的執行緒也需要消耗系統資源.executor是乙個頂層介面,它只宣告了乙個方...