]> AND Private Git Repository - loba.git/blobdiff - process.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Use a do..while() loop instead of this ugly continue statement.
[loba.git] / process.cpp
index e77217686c25ac7ff6961282fac698c8008d9263..1414033046365d661c1d3c87ff00eb5e66c5b08a 100644 (file)
@@ -203,21 +203,23 @@ void process::compute_loop()
 
     double next_iter_after_date = MSG_get_clock() + opt::min_comp_iter_duration;
     while (still_running()) {
 
     double next_iter_after_date = MSG_get_clock() + opt::min_comp_iter_duration;
     while (still_running()) {
-        // receive (do not block if there is something to compute)
-        data_receive(real_load > 0.0 ? 0.0 : opt::min_comp_iter_duration);
 
 
-        // send
-        comm.data_flush(false);
-        mutex.acquire();
-        real_load += received_load;
-        received_load = 0.0;
-        std::for_each(neigh.begin(), neigh.end(),
-                      std::bind(&process::data_send, this, _1));
-        mutex.release();
+        do {
+            // receive (do not block if there is something to compute)
+            data_receive(real_load > 0.0 ? 0.0 : opt::min_comp_iter_duration);
+
+            // send
+            comm.data_flush(false);
+            mutex.acquire();
+            real_load += received_load;
+            received_load = 0.0;
+            std::for_each(neigh.begin(), neigh.end(),
+                          std::bind(&process::data_send, this, _1));
+            mutex.release();
+
+            ++all_comp_iter;
 
 
-        ++all_comp_iter;
-        if (real_load == 0.0)
-            continue;
+        } while (real_load == 0.0);
 
         convergence_check();
 
 
         convergence_check();