X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Ftcontrl.c;h=a9ec0d346a20f9f3c0d08e0f89083df4e84eaf03;hb=e6d0e922c94c9999f1f8a803af008e0a482bedf0;hp=9142d20950f03587c4357d869cea863f160811fa;hpb=82b026e6376b640a4d3409a461dd6bd83708e33e;p=gnushogi.git diff --git a/gnushogi/tcontrl.c b/gnushogi/tcontrl.c index 9142d20..a9ec0d3 100644 --- a/gnushogi/tcontrl.c +++ b/gnushogi/tcontrl.c @@ -2,11 +2,15 @@ * FILE: tcontrl.c * * ---------------------------------------------------------------------- - * - * Copyright (c) 2012 Free Software Foundation + * Copyright (c) 1993, 1994, 1995 Matthias Mutz + * Copyright (c) 1999 Michael Vanier and the Free Software Foundation + * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation * * GNU SHOGI is based on GNU CHESS * + * Copyright (c) 1988, 1989, 1990 John Stanback + * Copyright (c) 1992 Free Software Foundation + * * This file is part of GNU SHOGI. * * GNU Shogi is free software; you can redistribute it and/or modify it @@ -344,3 +348,69 @@ CheckForTimeout(int score, int globalscore, int Jscore, int zwndw) if (flag.timeout) ShowMessage("timeout"); } + + +/* + * Determine the time that has passed since the search was started. If the + * elapsed time exceeds the target(ResponseTime + ExtraTime) then set timeout + * to true which will terminate the search. + * iop = COMPUTE_MODE calculate et, bump ETnodes + * iop = COMPUTE_AND_INIT_MODE calculate et, set timeout if time exceeded, + * set reference time + */ +void +ElapsedTime(ElapsedTime_mode iop) +{ + long current_time; +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; +#endif + + PollForInput(); + +#ifdef HAVE_GETTIMEOFDAY + gettimeofday(&tv, NULL); + current_time = tv.tv_sec*100 + (tv.tv_usec/10000); +#else + et = ((current_time = time((long *) 0)) - time0) * 100; +#endif + +#ifdef INTERRUPT_TEST + if (iop == INIT_INTERRUPT_MODE) + { + itime0 = current_time; + } + else if (iop == COMPUTE_INTERRUPT_MODE) + { + it = current_time - itime0; + } + else +#endif + { +#ifdef HAVE_GETTIMEOFDAY + et = current_time - time0; +#endif + ETnodes = NodeCnt + znodes; + + if (et < 0) + { +#ifdef INTERRUPT_TEST + printf("elapsed time %ld not positive\n", et); +#endif + et = 0; + } + + if (iop == COMPUTE_AND_INIT_MODE) + { + if ((et > (ResponseTime + ExtraTime)) && (Sdepth > MINDEPTH)) + flag.timeout = true; + + time0 = current_time; + } + +#ifdef QUIETBACKGROUND + if (!background) +#endif + UpdateClocks(); + } +}