2013-05-07 2 views
3

Я пытаюсь понять, как я буду переносить свой шахматный движок Java на дротик.Как завершить длинную изоляцию

Таким образом, я понял, что должен использовать Isolates и/или Futures для запуска моего движка параллельно с графическим интерфейсом, но как заставить механизм завершить поиск.

В java я просто задал несколько булевых значений, которые были разделены между потоком двигателя и потоком gui.

+0

Там в прослеживание вопрос/продублировать здесь: http://stackoverflow.com/questions/16492151/how-to-terminate-a-long-running-isolate-2 – raymi

ответ

3

Вы должны отправить сообщение в изолятор, сообщая ему, чтобы он остановился. Вы можете просто сделать что-то вроде:

port.send('STOP'); 

Чтобы было ясно, изолирует и фьючерсы две разные вещи, и использовать их по-разному.

Используйте изолят, если вы хотите, чтобы какой-то код действительно выполнялся одновременно, в отдельной «изолированной куче памяти». Изоляция похожа на мини-программу, которая работает отдельно от вашей основной программы. Вы отправляете сообщения с изоляцией, и вы можете получать сообщения от изолятов.

Используйте будущее, когда вы хотите получать уведомление, когда значение доступно позже. «Позже» определяется как «будущий тик в цикле событий». Каждый изолятор имеет свой собственный цикл событий. Важно понимать, что просто попросить «Будущее» запустить функцию не означает, что функция запускается параллельно. Он просто помещает функцию в цикл событий, который будет запущен «позже».

+2

Спасибо за разъяснения. Я не понимаю, что если изолированный изолированный механизм шахмат занят из-за команды port.send («THINK»), как он может реагировать на команду port.send («STOP»). –

1

Отвечая на подразумеваемый вопрос: «Как я могу заставить долго выполняющуюся задачу изолировать, чтобы прекратить работу?» а не более явным образом спросил: «Как я могу заставить изолировать закончить, освободить его ресурсы и вообще перестать быть?»

  • Перерыв на длительное выполнение задачи на меньшие, более короткие ходовые части.

  • Выполнение каждого блока с помощью Future. Цепочные фьючерсы в зависимости от ситуации.

  • Укажите флаг, который должен проверить каждый блок перед выполнением его логики. Если флаг установлен, залог.

  • Слушайте сообщение «остановить» и установите флаг, если/когда он получен.

Расщепление основной задачей обработки до фьючерсные позволяет обрабатывать сообщения остановки, чтобы получить на очереди событий перед единицами обработки основной задачи.

0

Существует в настоящее время iso.Isolate.kill()

  • ВНИМАНИЕ: Этот метод является экспериментальным и не обрабатывается на каждой платформе еще.