OK, lo tengo para trabajar ahora, tal vez hice algo mal antes, aquí es cómo lo hice usando hilos impulsar y mutex
bool update;
boost::mutex updateModelMutex;
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>);
void visualize()
{
// prepare visualizer named "viewer"
while (!viewer->wasStopped())
{
viewer->spinOnce (100);
// Get lock on the boolean update and check if cloud was updated
boost::mutex::scoped_lock updateLock(updateModelMutex);
if(update)
{
if(!viewer->updatePointCloud(cloud, "sample cloud"))
viewer->addPointCloud(cloud, colorHandler, "sample cloud");
update = false;
}
updateLock.unlock();
}
}
int main()
{
//Start visualizer thread
boost::thread workerThread(visualize);
while(notFinishedProcessing)
{
boost::mutex::scoped_lock updateLock(updateModelMutex);
update = true;
// do processing on cloud
updateLock.unlock();
}
workerThread.join();
}
ACTUALIZACIÓN:
según t su page La razón es que agregar una nube de puntos vacía al visualizador hace que las cosas se vuelvan locas, así que edité el código de arriba
Hola @khaled!. Entonces, ¿el viusalizer se ejecuta en un hilo diferente y funciona bien ?. En PCLVisualizer doxy docs encontré esto: 'Esta clase NO se puede usar en múltiples hilos. ¡Solo llama a funciones de objetos de esta clase desde el mismo hilo en el que fueron creadas! Algunos métodos, p. addPointCloud, se bloqueará si se llama desde otros hilos'. Estoy realmente interesado en tener el visualizador ejecutándose en otro hilo, así que por favor. ¿Podría confirmar que su enfoque funciona? : D –
sí esto realmente funciona. el documento sigue siendo correcto, debe llamar a métodos como 'addPointCloud' solo desde el hilo de la visualización no desde otro hilo. Por lo tanto, no puede llamar a 'addPointCloud' desde el método principal si su ciclo de visualización está en un hilo diferente. – Khaled
¡Gracias !. Voy a intentar esto de inmediato !. –