0

最近我正在研究国际象棋,对于人工智能,我正在使用带有 UCI 协议的 Stockfish。感谢以下 2 个链接(UCI 协议:http ://wbec-ridderkerk.nl/html/UCIProtocol.html和这篇文章:在 Unity 中使用 Stockfish Chess AI)我已经取得了一些进展,但我有一个问题。

这是我的代码:

        var p = new System.Diagnostics.Process();

        p.StartInfo.FileName = "C:/stockfish/stockfish-11-win/Windows/stockfish_20011801_32bit";

        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardInput = true;
        p.StartInfo.RedirectStandardOutput = true;

        p.Start();



        StreamWriter myStreamWriter = p.StandardInput;
        myStreamWriter.WriteLine("position fen " + fen);
        myStreamWriter.WriteLine("go movetime 2000");
        myStreamWriter.Close();

        Thread.Sleep(2000);



        StreamReader reader = p.StandardOutput;
        String bestMoveInAlgebraicNotation = reader.ReadToEnd();
        reader.Close();


        p.Close();

        return bestMoveInAlgebraicNotation;

当我用以下代码询问 Stockfish 时:myStreamWriter.WriteLine("go movetime 2000");

他这样做了,但是当我要求关闭进程时立即停止:p.Close();

所以我想让进程等到任务完成,有没有办法做,怎么做?

感谢您阅读我,祝您有美好的一天。

4

1 回答 1

0

利用p.WaitForExit();

设置等待关联进程退出的时间段,并阻塞当前执行线程,直到时间过去或进程退出。

于 2020-06-02T22:47:07.680 回答