Author: Robert Pope
Date: 06:17:44 03/08/02
Go up one level in this thread
On March 08, 2002 at 00:27:18, Robert Hyatt wrote:
>
>One _very_ bad thing CM used to do was poll for input in a tight loop when
>it was sitting waiting on a move (not pondering). This meant that it would
>burn 50% of the CPU while the _other_ program was thinking. This was a
>bad bug several years ago, and I have no idea if it was ever fixed or not.
>
>If not, that _might_ be what is being discussed. A tight "got any input?"
>loop is NFG when the engine could simply block on a read() call... which
>would burn no CPU at all.
This is actually the very problem I have with my own chess engine - it uses 100%
CPU on its move an 50% CPU on the opponent's move, just because of polling.
This is my first multi-threaded app, so I'm not sure how to fix this (blocking,
etc.). I thought my code would not be so hoggy because the polling thread would
stop at the fgets() and wait for input, but apparently not.
Is there a simple fix for this? Here is the function that the thread runs (via a
_beginthread call):
void InputThread(void* threadno)
{
char strIn[256];
inputThreadActive++;
for(;;) {
inputWaiting=false;
stringIn[0]=10;
fgets(strIn,255,stdin);
int i;
for (i=0;i<256;i++) {
stringIn[i]=strIn[i];
}
inputThreadActive--;
inputWaiting=true;
for(;;) {
if((!inputWaiting)||(endInputThread)) break;
}
if(endInputThread) break;
}
printf("thread ending");
_endthread();
}
I wanted to keep all my threading simple and in one place, but not at its
current cost!
This page took 0 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.