2 * xtimer.c -- timing functions for X front end of XBoard
4 * Copyright 1991 by Digital Equipment Corporation, Maynard,
7 * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
8 * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
9 * Software Foundation, Inc.
11 * The following terms apply to Digital Equipment Corporation's copyright
13 * ------------------------------------------------------------------------
16 * Permission to use, copy, modify, and distribute this software and its
17 * documentation for any purpose and without fee is hereby granted,
18 * provided that the above copyright notice appear in all copies and that
19 * both that copyright notice and this permission notice appear in
20 * supporting documentation, and that the name of Digital not be
21 * used in advertising or publicity pertaining to distribution of the
22 * software without specific, written prior permission.
24 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
25 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
26 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
27 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
28 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
29 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
31 * ------------------------------------------------------------------------
33 * The following terms apply to the enhanced version of XBoard
34 * distributed by the Free Software Foundation:
35 * ------------------------------------------------------------------------
37 * GNU XBoard is free software: you can redistribute it and/or modify
38 * it under the terms of the GNU General Public License as published by
39 * the Free Software Foundation, either version 3 of the License, or (at
40 * your option) any later version.
42 * GNU XBoard is distributed in the hope that it will be useful, but
43 * WITHOUT ANY WARRANTY; without even the implied warranty of
44 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
45 * General Public License for more details.
47 * You should have received a copy of the GNU General Public License
48 * along with this program. If not, see http://www.gnu.org/licenses/. *
50 *------------------------------------------------------------------------
51 ** See the file ChangeLog for a revision history. */
59 #include <sys/types.h>
66 #else /* not STDC_HEADERS */
67 extern char *getenv();
70 # else /* not HAVE_STRING_H */
72 # endif /* not HAVE_STRING_H */
73 #endif /* not STDC_HEADERS */
75 #if HAVE_SYS_SYSTEMINFO_H
76 # include <sys/systeminfo.h>
77 #endif /* HAVE_SYS_SYSTEMINFO_H */
79 #if TIME_WITH_SYS_TIME
80 # include <sys/time.h>
84 # include <sys/time.h>
95 # include <sys/wait.h>
100 #include "frontend.h"
106 #define usleep(t) _sleep2(((t)+500)/1000)
109 guint delayedEventTimerTag = 0;
110 DelayedEventCallback delayedEventCallback = 0;
113 FireDelayedEvent(gpointer data)
115 g_source_remove(delayedEventTimerTag);
116 delayedEventTimerTag = 0;
117 delayedEventCallback();
121 ScheduleDelayedEvent (DelayedEventCallback cb, long millisec)
123 if(delayedEventTimerTag && delayedEventCallback == cb)
124 // [HGM] alive: replace, rather than add or flush identical event
125 g_source_remove(delayedEventTimerTag);
126 delayedEventCallback = cb;
127 delayedEventCallback = cb;
128 delayedEventTimerTag = g_timeout_add(millisec,(GSourceFunc) FireDelayedEvent, NULL);
134 if (delayedEventTimerTag) {
135 return delayedEventCallback;
142 CancelDelayedEvent ()
144 if (delayedEventTimerTag) {
145 g_source_remove(delayedEventTimerTag);
146 delayedEventTimerTag = 0;
151 guint loadGameTimerTag = 0;
153 int LoadGameTimerRunning()
155 return loadGameTimerTag != 0;
161 if (loadGameTimerTag != 0) {
162 g_source_remove(loadGameTimerTag);
163 loadGameTimerTag = 0;
171 LoadGameTimerCallback(gpointer data)
173 g_source_remove(loadGameTimerTag);
174 loadGameTimerTag = 0;
179 StartLoadGameTimer (long millisec)
182 g_timeout_add( millisec, (GSourceFunc) LoadGameTimerCallback, NULL);
185 guint analysisClockTag = 0;
188 AnalysisClockCallback(gpointer data)
190 if (gameMode == AnalyzeMode || gameMode == AnalyzeFile
191 || appData.icsEngineAnalyze) { // [DM]
192 AnalysisPeriodicEvent(0);
198 StartAnalysisClock ()
201 g_timeout_add( 2000,(GSourceFunc) AnalysisClockCallback, NULL);
204 guint clockTimerTag = 0;
209 return clockTimerTag != 0;
215 if (clockTimerTag != 0)
217 g_source_remove(clockTimerTag);
226 ClockTimerCallback(gpointer data)
229 g_source_remove(clockTimerTag);
236 StartClockTimer (long millisec)
238 clockTimerTag = g_timeout_add(millisec,(GSourceFunc) ClockTimerCallback,NULL);