cerr << __FILE__ << "(" << __LINE__ << ")"
<< ": destructor." << endl;
#endif // DEBUG
- // Termino transmisiones.
- Glib::Mutex::Lock lock(transmissions_mutex);
- for (TransmitterList::iterator trans = transmissions.end();
+ // Mando a terminar todas las transmisiones.
+ transmissions_mutex.lock();
+ for (TransmitterList::iterator trans = transmissions.begin();
trans != transmissions.end(); trans++) {
- (*trans)->finish(true);
+ (*trans)->finish();
+ }
+ TransmitterList::size_type count = transmissions.size();
+ transmissions_mutex.unlock();
+ // Espero que terminen realmente.
+ while (count) {
+ Glib::usleep(10000); // 10 milisegundos
+ transmissions_mutex.lock();
+ count = transmissions.size();
+ transmissions_mutex.unlock();
}
}
*/
}
-void Plant::real_run(void) {
+void Plant::real_run(void) throw() {
#ifdef DEBUG
cerr << __FILE__ << "(" << __LINE__ << ")"
<< ": real_run." << endl;
#endif // DEBUG
- while (!stop) {
+ while (!stop()) {
simulator_mutex.lock();
simulator.simulate();
string plantstatus = simulator.get_state_as_xml();
(*i)->send(plantstatus);
}
transmissions_mutex.unlock();
- Glib::usleep(1000000);
+ Glib::usleep(100000);
}
}
// return false;
}
transmissions.push_back(trans);
- trans->signal_finished().connect(SigC::bind<Transmitter*>(
+ trans->signal_finished().connect(SigC::bind(
SigC::slot_class(*this, &Plant::on_transmission_finished),
trans));
trans->run();