2013-05-10 12 views
5

Sto cercando di capire come porterò il mio motore di scacchi Java a freccette.Come terminare un isolamento di lunga durata n. 2

Quindi ho capito che dovrei usare un isolamento per far funzionare il mio motore in parallelo con la GUI, ma come posso forzare il motore a terminare la ricerca.

In java ho appena impostato un valore booleano che è condiviso tra il thread del motore e il thread del GUI.

risposta che ho ricevuto:

Si dovrebbe inviare un messaggio a l'isolato, dicendogli di smettere. Puoi semplicemente fare qualcosa del tipo:

port.send ('STOP');

La mia richiesta

Grazie per il chiarimento. Quello che non capisco è che se l'isolatore del motore di scacchi è occupato a causa di un comando port.send ('THINK') come può rispondere a un comando port.send ('STOP')

+0

Funziona e stai solo cercando di capire il processo sottostante, o non riesci a farlo rispondere al comando 'STOP'? –

risposta

7

Ogni isolato è singolo -threaded. Finché il tuo programma è in esecuzione, nessun altro avrà i mezzi per interferire con la tua esecuzione.

Se si desidera essere in grado di reagire a eventi esterni (inclusi i messaggi provenienti da altri isolati) è necessario suddividere l'esecuzione di lunga durata in parti più piccole. Un motore di scacchi probabilmente ha già qualche stato per sapere dove cercare la mossa successiva (supponendo che sia costruito con qualcosa come A *). In questo caso è possibile interrompere periodicamente l'esecuzione e riprendere dopo un timeout minimo.

Esempio:

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

Ok ho capito ... grazie mille! –

Problemi correlati