我試圖創建在C升壓線程++,可重複使用,運行多種,可以有不同的數量和args的類型的功能。一個線程是否可以被重用來運行可變參數函數?
可以這樣用C++ 11X variadics做了什麼?我不需要一個隊列(如果線程繁忙,那麼方法就會失敗),但如果需要實現這個「統一」功能,我會不情願地這樣做。
我不明白如何處理與統一綁定或lambda讓一個線程可以調用不同的函數,每個人都有自己不同數量和類型參數的個數。
我已經大致記住以下幾點:
class WorkThread
{
public:
WorkThread()
{
// create thread and bind runner to thread
}
~WorkThread()
{
// tell runner to exit and wait and reap the thread
}
template<typename F,typename ... Arguments>
void doWork(F func, Arguments... args)
{
if already busy
return false;
// set indication to runner that there is new work
// here: how to pass f and args to runner?
}
private:
void runner()
{
while (! time to quit)
{
wait for work
// here: how to get f and args from doWork? do I really need a queue? could wait on a variadic signal maybe?
f(args);
}
}
boost::thread* m_thread;
};
class ThreadPool
{
public:
template<typename F, typename ... Arguments>
bool doWork(F func,Arguments... args)
{
const int i = findAvailableWorkThread();
m_thread[i].doWork(f,args);
}
private:
// a pool of work threads m_thread;
};
太棒了。它工作很好。 – user2138025 2013-03-19 16:53:43