Как остановить симуляцию в контиках со скриптом, когда все пылинки (узлы) имеют определенный вывод? - PullRequest
0 голосов
/ 19 февраля 2019

Этот код остановит моделирование, когда один узел (независимо от того, какой именно) напечатает 'ok'.

WAIT_UNTIL(msg.equals('ok'));
log.testOK();

Этот код означает, что узел 1 напечатает 'ok', а затем остановится.

WAIT_UNTIL(id == 1 && msg.equals("ok"));
log.testOK();

Я хочу остановить симуляцию, когда все узлы уже выводят «ok», то есть после каждого узла выводит «ok» хотя бы один раз.Я попробовал некоторые коды, но это не сработало.

Не работает (каждый узел уже печатает нормально, не останавливается) код (предположим, у меня есть 10 узлов):

var test = 0;
for (var i=1;i<11;i++)
{
    if (id == i && msg.equals("ok")){
        test = test+1;
        }
}
WAIT_UNTIL(test == 10);
log.testOK();

Не работает (каждый узел уже печатает нормально, не останавливается) либо:

WAIT_UNTIL((id == 1 && msg.equals("ok"))&&(id == 2 && msg.equals("ok")....(id == 10 && msg.qeuals("ok"));
log.testOK();

Есть предложения?Заранее большое спасибо.Лучше, если мне не нужно указывать общее количество узлов в скрипте.

1 Ответ

0 голосов
/ 23 мая 2019

Подождите, пока ваше состояние не станет верным.Когда истина, тогда вызовите функцию stopSimulation () класса Simulation.

/* Stops this simulation (notifies observers). */ 
public void stopSimulation() 
{ 
    if (isRunning())
     { 
        stopSimulation = true; 
        /* Wait until simulation stops */ 
        if (Thread.currentThread() != simulationThread) 
           { 
            try 
               { 
                if (simulationThread != null) 

                   { 
                     simulationThread.join(); 
                    } 
               } 
                 catch (InterruptedException e) 
                    { 
                    } 
               } 
         }
    } 
...