Esto es un poco crudo pero a partir de ahora todavía está funcionando para mis requisitos. :) Estoy usando boost 153 y qt. Creé un vector de int para rastrear el "estado" de mis hilos. Cada vez que creo un nuevo hilo, agrego una entrada a thread_ids con un valor de 0. Para cada hilo creado, paso una identificación así sé qué parte de thread_ids se supone que debo actualizar. Establezca el estado en 1 para ejecutar y otros valores, dependiendo de la actividad que esté realizando actualmente, así sabré qué actividad se estaba realizando cuando finalizó el hilo. 100 es el valor que configuro para un hilo terminado correctamente. No estoy seguro si esto ayudará, pero si tiene otras sugerencias sobre cómo mejorar esto, hágamelo saber. :)
std::vector<int> thread_ids;
const int max_threads = 4;
void Thread01(int n, int n2)
{
thread_ids.at(n) = 1;
boost::this_thread::sleep(boost::posix_time::milliseconds(n2 * 1000));
thread_ids.at(n) = 100;
qDebug()<<"Done "<<n;
}
void getThreadsStatus()
{
qDebug()<<"status:";
for(int i = 0; i < max_threads, i < thread_ids.size(); i++)
{
qDebug()<<thread_ids.at(i);
}
}
int main(int argc, char *argv[])
{
for(int i = 0; i < max_threads; i++)
{
thread_ids.push_back(0);
threadpool.create_thread(
boost::bind(&boost::asio::io_service::run, &ioService));
ioService.post(boost::bind(Thread01, i, i + 2));
getThreadsStatus();
}
ioService.stop();
threadpool.join_all();
getThreadsStatus();
}
Es un poco engañoso decir que puede dar lugar a una condición de carrera. 'timed_join' solo no puede hacer eso. si hace suposiciones incorrectas basadas en el resultado de la llamada, puede terminar con una condición de carrera, por supuesto, pero eso tiene menos que ver con 'timed_join' que con usted, suponiendo que el resultado de esa llamada aún sea válido. De todos modos, +1 – jalf
Creo que esto es realmente malo. ¿Por qué los diseñadores de impulso nunca piensan en la intuición o de principiantes? Un simple método isRunning() hubiera sido suficiente. En su lugar, obligan a uno a utilizar una función que, intuitivamente, no debería utilizarse en este caso. No quiero intentar unirme al hilo, solo quiero probar rápidamente si aún funciona algo. Esto es una mierda. Perdí mucho tiempo antes de encontrar esto. Ni una maldita palabra en los "documentos" tampoco. – AndreasT
Un hilo puede estar en 3 estados: Correr, Independiente, No ejecutar. –