2013-05-10 9 views
5

Próbuję zrozumieć, w jaki sposób mogę podłączyć mój silnik szachy Java do dartowania.Jak rozwiązać problem z długimi uruchomieniami izolatu # 2

Tak więc zrozumiałem, że powinienem używać Isolates do uruchomienia mojego silnika równolegle z GUI, ale jak mogę zmusić silnik do zakończenia wyszukiwania.

W java ustawiłem boolean, który jest dzielony między wątek silnika i wątek GUI.

odpowiedzi dostałem:

należy wysłać wiadomość do izolowania, informując go zatrzymać. Możesz po prostu zrobić coś takiego:

port.send ("STOP");

Moja prośba:

Dzięki za wyjaśnienia. Nie rozumiem, że jeśli izolat silnika szachowego jest zajęty z powodu polecenia port.send ("THINK"), jak może zareagować na polecenie port.send ("STOP")

+0

Czy to działa i próbujesz zrozumieć proces leżący u jego podstaw, czy też nie możesz go odpowiedzieć na polecenie "STOP"? –

Odpowiedz

7

Każdy izolat jest pojedynczy -threaded. Tak długo, jak twój program jest uruchomiony, nikt inny nie będzie w stanie przeszkodzić ci w wykonaniu.

Jeśli chcesz mieć możliwość reagowania na zdarzenia zewnętrzne (w tym wiadomości z innych izolatów), musisz podzielić długo trwające wykonanie na mniejsze części. Prawdopodobnie jakiś silnik szachowy ma już jakiś stan, aby wiedzieć, gdzie szukać następnego ruchu (zakładając, że jest zbudowany z czymś takim jak A *). W takim przypadku można po prostu okresowo przerwać wykonywanie i wznowić po minimalnym przekroczeniu limitu czasu.

przykład:

var state; 
var stopwatch = new Stopwatch()..run(); 
void longRunning() { 
    while (true) { 
    doSomeWorkThatUpdatesTheState(); 
    if (stopwatch.elapsedMilliseconds > 200) { 
     stopwatch.reset(); 
     Timer.run(longRunning); 
     return; 
    } 
    } 
} 
+0

Ok, rozumiem ... wielkie dzięki! –