thr_alarm.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  3.    This library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Library General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2 of the License, or (at your option) any later version.
  7.    
  8.    This library is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.    Library General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU Library General Public
  14.    License along with this library; if not, write to the Free
  15.    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  16.    MA 02111-1307, USA */
  17. /* Prototypes when using thr_alarm library functions */
  18. #ifndef _thr_alarm_h
  19. #define _thr_alarm_h
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #ifndef USE_ALARM_THREAD
  24. #define USE_ONE_SIGNAL_HAND /* One must call process_alarm */
  25. #endif
  26. #ifdef HAVE_LINUXTHREADS
  27. #define THR_CLIENT_ALARM SIGALRM
  28. #else
  29. #define THR_CLIENT_ALARM SIGUSR1
  30. #endif
  31. #ifdef HAVE_rts_threads
  32. #undef USE_ONE_SIGNAL_HAND
  33. #define USE_ALARM_THREAD
  34. #define THR_SERVER_ALARM SIGUSR1
  35. #else
  36. #define THR_SERVER_ALARM SIGALRM
  37. #endif
  38. #if defined(DONT_USE_THR_ALARM)
  39. #define USE_ALARM_THREAD
  40. #undef USE_ONE_SIGNAL_HAND
  41. typedef struct st_thr_alarm_entry
  42. {
  43.   uint crono;
  44. } thr_alarm_entry;
  45. #define thr_alarm_init(A)   (A)->crono=0
  46. #define thr_alarm_in_use(A) (A)->crono
  47. #define init_thr_alarm(A)
  48. #define thr_alarm_kill(A)
  49. #define end_thr_alarm()
  50. #define thr_alarm(A,B) (((A)->crono=1)-1)
  51. #define thr_got_alarm(A) (A)->crono
  52. #define thr_end_alarm(A)
  53. #else
  54. #if defined(__WIN__)
  55. typedef struct st_thr_alarm_entry
  56. {
  57.   rf_SetTimer crono;
  58. } thr_alarm_entry;
  59. #elif defined(__EMX__)
  60. typedef struct st_thr_alarm_entry
  61. {
  62.   uint crono;
  63.   uint event;
  64. } thr_alarm_entry;
  65. #else /* System with posix threads */
  66. typedef int thr_alarm_entry;
  67. #define thr_got_alarm(thr_alarm) (**(thr_alarm))
  68. #endif /* __WIN__ */
  69. typedef thr_alarm_entry* thr_alarm_t;
  70. typedef struct st_alarm {
  71.   ulong expire_time;
  72.   thr_alarm_entry alarmed; /* set when alarm is due */
  73.   pthread_t thread;
  74.   my_bool malloced;
  75. } ALARM;
  76. #define thr_alarm_init(A) (*(A))=0
  77. #define thr_alarm_in_use(A) (*(A)!= 0)
  78. void init_thr_alarm(uint max_alarm);
  79. bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff);
  80. void thr_alarm_kill(pthread_t thread_id);
  81. void thr_end_alarm(thr_alarm_t *alarmed);
  82. void end_thr_alarm(void);
  83. sig_handler process_alarm(int);
  84. #ifndef thr_got_alarm
  85. bool thr_got_alarm(thr_alarm_t *alrm);
  86. #endif
  87. #endif /* DONT_USE_THR_ALARM */
  88. #ifdef __cplusplus
  89. }
  90. #endif /* __cplusplus */
  91. #endif /* _thr_alarm_h */