efl

Форк
0
/
timeout.c 
50 строк · 764.0 Байт
1
#include <stdio.h>
2
static void (*timeout_func) (void) = NULL;
3

4
#ifdef _WIN32
5
# include <stdio.h>
6
# include <windows.h>
7
# include <process.h>
8

9
unsigned int
10
_timeout(void *arg)
11
{
12
   int s = (int)(uintptr_t)arg;
13
   Sleep(s * 1000);
14
   if (timeout_func) timeout_func();
15
   _Exit(-1);
16
   _endthreadex(0);
17
   return 0;
18
}
19

20
void
21
timeout_init(int seconds)
22
{
23
   unsigned 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

30
static void
31
_timeout(int val)
32
{
33
   if (timeout_func) timeout_func();
34
   _exit(-1);
35
   if (val) return;
36
}
37

38
void
39
timeout_init(int seconds)
40
{
41
   signal(SIGALRM, _timeout);
42
   alarm(seconds);
43
}
44
#endif
45

46
void
47
timeout_func_set(void (*func) (void))
48
{
49
   timeout_func = func;
50
}
51

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.