Здравствуйте, Alu, Вы писали:
Поток не должен управлять временем жизни объекта. В общем случае (а мы говорим про пул потоков), поток не завершается а фактически выбирает из очереди очередной Irunable и вызывает метод Run и так далее пока его не остановят. А вот управлять временем жизни объекта в рамках данной реализации я вижу ровно три способа.
Первый: объект IRunable автоматический, существует глобально, уничтожается гарантированно после пула потоков, либо после того как им уже никто не пользуется, регулируется дизайном, например
{
CSomeRunnable work;
CThreadPool pool;
pool.Init();
pool.Start(&work);
pool.Shutdown();
}
Второй: объект одноразовый, создается динамически, запускается в пул, уничтожается самостоятельно, отработав свою порцию
class CSomeRunable : public IRunable
{
virtual void Run()
{
// execute any work
delete this;
}
};
{
pool.Start(new CSomeRunnable());
}
Третий: похож на второй метод за исключением того что производится подсчет ссылок и автоматическое удаление объекта произойдет тогда когда на объект больше никто не ссылается, то есть RefCount=0