]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/plant.cpp
Se termina de poner prolijo Runnable:
[z.facultad/75.42/plaqui.git] / Server / src / plant.cpp
index b020e2109e9882c4389bbe4405967c377825cb57..970fbabbb2fd2be308659ff40e4bf177584c0882 100644 (file)
@@ -44,11 +44,20 @@ Plant::~Plant(void) {
        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();
        }
 }
 
@@ -71,12 +80,12 @@ Plant::Plant(const string& filename): simulator(filename), filename(filename) {
 */     
 }
 
-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();
@@ -87,7 +96,7 @@ void Plant::real_run(void) {
                        (*i)->send(plantstatus);
                }
                transmissions_mutex.unlock();
-               Glib::usleep(1000000);
+               Glib::usleep(100000);
        }
 }