2013-05-10 83 views
5

我想了解如何將我的Java國際象棋引擎移植到dart。如何終止長時間運行的隔離#2

所以我明白我應該使用Isolates來與GUI並行運行我的引擎,但是我怎樣才能強制引擎終止搜索。

在java中,我只是設置一些布爾值,在引擎線程和gui線程之間共享。

回答我:

你應該將消息發送到隔離,告訴它停下來。你可以簡單地做這樣的事情:

port.send('STOP');

我的請求

感謝您的澄清。我不明白的是,如果棋子引擎隔離由於port.send('THINK')命令而忙碌,它如何響應port.send('STOP')命令

+0

它是否正在工作,您只是想了解底層進程,或者您是否無法響應「STOP」命令? – 2013-05-10 23:59:35

回答

7

每個隔離區都是單個-threaded。只要你的程序正在運行,其他人就無法干預你的執行。

如果您希望能夠對外部事件(包括來自其他隔離區的消息)做出反應,則需要將長時間運行的執行分爲更小的部分。國際象棋引擎可能已經有一些狀態知道在哪裏尋找下一步行動(假設它是用A *之類的東西構建的)。在這種情況下,您可以定期中斷執行,並在最小超時後恢復。

實施例:

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

好吧,我明白了...非常感謝! – 2013-05-11 06:17:39

相關問題