563
563
GTRACE("<< ControladorComandos::AbortarComandosDeOwner(owner) : CS");
566
void GNC::GCS::ControladorComandos::WaitToOwnerCommands(void* owner)
568
GNC::GCS::WaitQueue wqueue;
571
GNC::GCS::ILocker locker(this, GLOC());
572
GTRACE(">> ControladorComandos::AbortarComandosDeOwner(owner) : CS");
573
// Recorremos la lista de threads_ids de la vista
574
MapaOwners::iterator it1 = m_MapaOwners.find(owner);
575
MapaComandos::iterator itcl;
576
if (it1 != m_MapaOwners.end()) {
577
for (ListaHilos::iterator it2 = (*it1).second.begin(); it2 != (*it1).second.end(); it2++) {
578
long threadId = (*it2);
579
// Buscamos el id en la lista de comandos lanzados
580
itcl = m_ComandosLanzados.find(threadId);
581
if (itcl != m_ComandosLanzados.end()) { // El comando esta lanzado
582
LanzadorComandos* pLanzador = (*itcl).second;
583
if (pLanzador != NULL) { //
585
wqueue.RegistrarEspera(pLanzador, GLOC());
586
pLanzador->Terminar();
588
std::cerr << "Registrando espera para tarea: threadId = " << (unsigned long) threadId << " ptr = " << pLanzador << std::endl;
590
std::cerr << "Detectada inconsistencia en el controlador de comandos: Comando lanzado desreferenciado. Flujo de comando perdido." << std::endl;
595
GTRACE("<< ControladorComandos::WaitToOwnerCommands(owner) : CS");
598
GTRACE("GNC::GCS::ControladorComandos::WaitToOwnerCommands( " << owner << ") : Esperando " << wqueue.Size(GLOC()) << " tareas");
599
while (wqueue.NotEmpty(GLOC())) {
600
if (!wqueue.Wait(500, GLOC())) {
603
GTRACE("GNC::GCS::ControladorComandos::WaitToOwnerCommands( " << owner << ") : Espera terminada");
566
606
void GNC::GCS::ControladorComandos::OnComandoLanzado(long threadId)