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 Free Software Foundation, Inc.
10 * The following terms apply to Digital Equipment Corporation's copyright
12 * ------------------------------------------------------------------------
15 * Permission to use, copy, modify, and distribute this software and its
16 * documentation for any purpose and without fee is hereby granted,
17 * provided that the above copyright notice appear in all copies and that
18 * both that copyright notice and this permission notice appear in
19 * supporting documentation, and that the name of Digital not be
20 * used in advertising or publicity pertaining to distribution of the
21 * software without specific, written prior permission.
23 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
24 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
25 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
26 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
27 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
28 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
30 * ------------------------------------------------------------------------
32 * The following terms apply to the enhanced version of XBoard
33 * distributed by the Free Software Foundation:
34 * ------------------------------------------------------------------------
36 * GNU XBoard is free software: you can redistribute it and/or modify
37 * it under the terms of the GNU General Public License as published by
38 * the Free Software Foundation, either version 3 of the License, or (at
39 * your option) any later version.
41 * GNU XBoard is distributed in the hope that it will be useful, but
42 * WITHOUT ANY WARRANTY; without even the implied warranty of
43 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
44 * General Public License for more details.
46 * You should have received a copy of the GNU General Public License
47 * along with this program. If not, see http://www.gnu.org/licenses/. *
49 *------------------------------------------------------------------------
50 ** See the file ChangeLog for a revision history. */
58 #include <sys/types.h>
65 #else /* not STDC_HEADERS */
66 extern char *getenv();
69 # else /* not HAVE_STRING_H */
71 # endif /* not HAVE_STRING_H */
72 #endif /* not STDC_HEADERS */
74 #if HAVE_SYS_SYSTEMINFO_H
75 # include <sys/systeminfo.h>
76 #endif /* HAVE_SYS_SYSTEMINFO_H */
78 #if TIME_WITH_SYS_TIME
79 # include <sys/time.h>
83 # include <sys/time.h>
94 # include <sys/wait.h>
105 #define usleep(t) _sleep2(((t)+500)/1000)
108 guint delayedEventTimerTag = 0;
109 DelayedEventCallback delayedEventCallback = 0;
112 FireDelayedEvent(gpointer data)
114 g_source_remove(delayedEventTimerTag);
115 delayedEventTimerTag = 0;
116 delayedEventCallback();
120 ScheduleDelayedEvent (DelayedEventCallback cb, long millisec)
122 if(delayedEventTimerTag && delayedEventCallback == cb)
123 // [HGM] alive: replace, rather than add or flush identical event
124 g_source_remove(delayedEventTimerTag);
125 delayedEventCallback = cb;
126 delayedEventCallback = cb;
127 delayedEventTimerTag = g_timeout_add(millisec,(GSourceFunc) FireDelayedEvent, NULL);
133 if (delayedEventTimerTag) {
134 return delayedEventCallback;
141 CancelDelayedEvent ()
143 if (delayedEventTimerTag) {
144 g_source_remove(delayedEventTimerTag);
145 delayedEventTimerTag = 0;
150 guint loadGameTimerTag = 0;
152 int LoadGameTimerRunning()
154 return loadGameTimerTag != 0;
160 if (loadGameTimerTag != 0) {
161 g_source_remove(loadGameTimerTag);
162 loadGameTimerTag = 0;
170 LoadGameTimerCallback(gpointer data)
172 g_source_remove(loadGameTimerTag);
173 loadGameTimerTag = 0;
178 StartLoadGameTimer (long millisec)
181 g_timeout_add( millisec, (GSourceFunc) LoadGameTimerCallback, NULL);
184 guint analysisClockTag = 0;
187 AnalysisClockCallback(gpointer data)
189 if (gameMode == AnalyzeMode || gameMode == AnalyzeFile
190 || appData.icsEngineAnalyze) { // [DM]
191 AnalysisPeriodicEvent(0);
196 StartAnalysisClock ()
199 g_timeout_add( 2000,(GSourceFunc) AnalysisClockCallback, NULL);
202 guint clockTimerTag = 0;
207 return clockTimerTag != 0;
213 if (clockTimerTag != 0)
215 g_source_remove(clockTimerTag);
224 ClockTimerCallback(gpointer data)
227 g_source_remove(clockTimerTag);
234 StartClockTimer (long millisec)
236 clockTimerTag = g_timeout_add(millisec,(GSourceFunc) ClockTimerCallback,NULL);