История изменений
Исправление aido, (текущая версия) :
Я решил пойти по пути наименьшего сопротивления и воспользовался Boost.Fusion, но встала проблема - как передать в тред параметры?
Вот мой код (вместо знака "?" нужно придумать, что подставить, чтобы сработало):
template<class T>struct TRunningClass
{
boost::thread* thr;
T* worker;
};
template<class... Childrens> class TChild
{
private:
boost::fusion::vector<TRunningClass<Childrens>...> tupChild;
void RunThreads();
void StopThreads();
....
public:
....
}
struct RunThread
{
template<class T>
void operator()(TRunningClass<T> &obj, void* params) const
{
obj.thr= new boost::thread([&]()
{
obj.worker=new T(params);
});
}
};
template<class... Childrens>
void TChild<Childrens...>::RunThreads()
{
boost::fusion::for_each(tupChild, boost::bind<?>(RunThread,_1,log_));
}
struct StopThread
{
template<class T>
void operator()(TRunningClass<T> &obj) const
{
obj.thr->join();
}
};
template<class... Childrens>
void TChild<Childrens...>::StopThreads()
{
boost::fusion::for_each(tupChild, StopThread());
}
Исходная версия aido, :
Я решил пойти по пути наименьшего сопротивления и воспользовался Boost.Fusion, но встала проблема - как передать в тред параметры?
Вот мой код (вместо знака "?" нужно придумать, что подставить, чтобы сработало):
template<class... Childrens> class TChild
{
private:
boost::fusion::vector<TRunningClass<Childrens>...> tupChild;
void RunThreads();
void StopThreads();
....
public:
....
}
struct RunThread
{
template<class T>
void operator()(TRunningClass<T> &obj, void* params) const
{
obj.thr= new boost::thread([&]()
{
obj.worker=new T(params);
});
}
};
template<class... Childrens>
void TChild<Childrens...>::RunThreads()
{
boost::fusion::for_each(tupChild, boost::bind<?>(RunThread,_1,log_));
}
struct StopThread
{
template<class T>
void operator()(TRunningClass<T> &obj) const
{
obj.thr->join();
}
};
template<class... Childrens>
void TChild<Childrens...>::StopThreads()
{
boost::fusion::for_each(tupChild, StopThread());
}