efl
1#include <stdio.h>
2static void (*timeout_func) (void) = NULL;
3
4#ifdef _WIN32
5# include <stdio.h>
6# include <windows.h>
7# include <process.h>
8
9unsigned int
10_timeout(void *arg)
11{
12int s = (int)(uintptr_t)arg;
13Sleep(s * 1000);
14if (timeout_func) timeout_func();
15_Exit(-1);
16_endthreadex(0);
17return 0;
18}
19
20void
21timeout_init(int seconds)
22{
23unsigned int id;
24_beginthreadex( NULL, 0, _timeout, (void *)(uintptr_t)seconds, 0, &id);
25}
26#else
27# include <unistd.h>
28# include <signal.h>
29
30static void
31_timeout(int val)
32{
33if (timeout_func) timeout_func();
34_exit(-1);
35if (val) return;
36}
37
38void
39timeout_init(int seconds)
40{
41signal(SIGALRM, _timeout);
42alarm(seconds);
43}
44#endif
45
46void
47timeout_func_set(void (*func) (void))
48{
49timeout_func = func;
50}
51