Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: questions about using fget as waiting loop

Author: Robert Hyatt

Date: 10:57:59 08/30/04

Go up one level in this thread


On August 30, 2004 at 11:25:26, Alessandro Scotti wrote:

>On August 30, 2004 at 10:20:05, Robert Hyatt wrote:
>
>>What do you do about the case where you type "command"<CR>  "command"<CR> (two
>>commands) before your program does the "check for input"?  You do the first
>>fgets() and the C library sucks both commands into its internal buffer, by
>>reading the data from the O/S, and it gives you the first command.  Now when you
>>ask "is there more input" you are asking the O/S and it says "no" even though
>>the C library has the second command in its buffer.  This is a _common_ problem
>>when people first modify their engines to run with winboard/xboard.  It is such
>>a problem that Tim and I wrote a lot of text to explain why this is a problem
>>and how to get around it...
>
>Well I don't know because I've never found this problem in any of my prototypes.
>Maybe it's the mix of asking both the O/S and the standard lib that messes
>things up.
>I have a separate thread that performs fgets (I also tried fread and ReadFile
>and they work as well) and simply blocks if there is nothing to get. I have just
>tried the experiment you suggested and it works fine, probably because I always
>use fgets() so I'm reading from the same buffer.


The problem is that the question "is there input to read" polls the operating
system, not the library buffer.  That's why all the warnings and explanations
are in the engine interface document that comes with xboard/winboard.

The only solutions are (a) threads;  (b) non-buffered I/O.  Either works.
Threads cause a few more portability issues.



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.