William M. Shubert wrote:
There. Now much easier to see in logs, etc. Note that the server is sending two text commands (genmove and abort) and it always gets two responses, just like everything else in the GTP protocol. I don't see any way that this would be harder than using a control character -
the single character solution leaves the possibility open for a simple implementation on POSIX systems avoiding the need for a thread. You could use select, getc and putc to poll at certain times during your lengthy command and do a blocking read when waiting for the next real command. Putc allows you to put back only one character. (It does not work if there is still something in stdio's buffer, but this is no problem, since interrupting won't be used in batch mode anyway).
I agree that interrupting the search does not make sense for all programs and should be optional. But at least for the two I am working with (NeuroGo and Explorer), it is useful.
Maybe we should leave the possibility open if the program answers to an interrupted genmove with a move or an error. If the program does not handle interrupting, it will answer with a move anyway. For example GoGui does not have to know, if the answer will be success or error, it handles both cases correctly automatically, playing the move, on success and showing an error on failure.
- Markus