さまざまな数と型の引数を持つことができるさまざまな関数を実行するために再利用できる C++ でブースト スレッドを作成しようとしています。
これは C++11x 可変引数で実行できますか?
私の使用例では、キューは必要ありません (スレッドがビジーの場合、メソッドは単に失敗します) が、この「統合」機能を実装する必要がある場合は、しぶしぶそうします。
bind または lambda を使用して unify を処理する方法がわかりません。これにより、1 つのスレッドが、それぞれ独自の異なる数量とタイプの引数を持つ異なる関数を呼び出すことができます。
おおむね次のことを念頭に置いています。
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;
};