AI コンペティションに参加するボット用のテスト サーバーを実装しています。ボットは、標準の入出力を介してサーバーと通信します。ボットのターンは非常に長いです。以前の AI コンテストで、私はJavaでサーバーを作成し、BlockingQueue とプロセス ストリームへの読み取り/書き込みをブロックするスレッドを使用してこれを処理しました。
このコンペティションでは、C++ の使用を検討しています。Boost.Processと Boost.Asioを見つけましたが、私が知る限り、Asio ライブラリには読み取りを待機する時間をタイムアウトにする方法がありません。コールバック関数を使用して、読み取りが完了したことを通知するように設計されています。ブロックしたいのですが、タイムアウトが最大です。selectのようなプラットフォーム固有のAPIでこれを行うことができますが、より多くのクロスプラットフォームソリューションを探しています。助言がありますか?
編集:明確にするために、2つのメソッドを持つボットプロセスとの通信を処理するクラス BotConnection が必要です: string readLine(long timeoutInMilliseconds) と void writeLine(string line, long timeoutInMilliseconds) 。したがって、呼び出しコードは、ブロッキング呼び出しを使用しているように記述されていますが、タイムアウトする可能性があります (例外をスローするか、上記のメソッド シグネチャを変更して、操作が完了またはタイムアウトした場合に成功フラグが返されるようにします)。