gwthread.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:4k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * gwthread.h - threads wrapper with interruptible sleep and poll operations.
  3.  *
  4.  * This is a (partial) encapsulation of threads.  It provides functions
  5.  * to create new threads and to manipulate threads.  It will eventually
  6.  * be extended to encapsulate all pthread functions we use, so that
  7.  * non-POSIX platforms can plug in their own versions.
  8.  *
  9.  * Richard Braakman
  10.  */
  11. #ifndef GWTHREAD_H
  12. #define GWTHREAD_H
  13. /* gwthread_self() must return this value for the main thread. */
  14. #define MAIN_THREAD_ID 0
  15. typedef void gwthread_func_t(void *arg);
  16. /* Called by the gwlib init code */
  17. void gwthread_init(void);
  18. void gwthread_shutdown(void);
  19. /* Start a new thread, running func(arg).  Return the new thread ID
  20.  * on success, or -1 on failure.  Thread IDs are unique during the lifetime
  21.  * of the entire process, unless you use more than LONG_MAX threads. */
  22. long gwthread_create_real(gwthread_func_t *func, const char *funcname,
  23.   void *arg);
  24. #define gwthread_create(func, arg) 
  25. (gwthread_create_real(func, __FILE__ ":" #func, arg))
  26. /* Wait for the other thread to terminate.  Return immediately if it
  27.  * has already terminated. */
  28. void gwthread_join(long thread);
  29. /* Wait for all threads whose main function is `func' to terminate.
  30.  * Return immediately if none are running. */
  31. void gwthread_join_every(gwthread_func_t *func);
  32. /* Wait for all threads to terminate.  Return immediately if none
  33.  * are running.  This function is not intended to be called if new
  34.  * threads are still being created, and it may not notice such threads. */
  35. void gwthread_join_all(void);
  36. /* Return the thread id of this thread.  Note that it may be called for
  37.  * the main thread even before the gwthread library has been initialized
  38.  * and after it had been shut down. */
  39. long gwthread_self(void);
  40. /* If the other thread is currently in gwthread_pollfd or gwthread_sleep,
  41.  * make it return immediately.  Otherwise, make it return immediately, the
  42.  * next time it calls one of those functions. */
  43. void gwthread_wakeup(long thread);
  44. /* Wake up all threads */
  45. void gwthread_wakeup_all(void);
  46. /* Wrapper around the poll() system call, for one file descriptor.
  47.  * "events" is a set of the flags defined in <sys/poll.h>, usually
  48.  * POLLIN, POLLOUT, or (POLLIN|POLLOUT).  Return when one of the
  49.  * events is true, or when another thread calls gwthread_wakeup on us, or
  50.  * when the timeout expires.  The timeout is specified in seconds,
  51.  * and a negative value means do not time out.  Return the revents
  52.  * structure filled in by poll() for this fd.  Return -1 if something
  53.  * went wrong. */
  54. int gwthread_pollfd(int fd, int events, double timeout);
  55. /* Wrapper around the poll() system call, for an array of file
  56.  * descriptors.  The difference with normal poll is that the
  57.  * thread can be woken up with gwthread_wakeup.  timeout is in seconds. */
  58. /* NOTE: This interface will probably change in the future, because currently
  59.  * it is hard to implement efficiently. */
  60. int gwthread_poll(struct pollfd *fds, long numfds, double timeout);
  61. /* Sleep until "seconds" seconds have elapsed, or until another thread
  62.  * calls gwthread_wakeup on us.  Fractional seconds are allowed. */
  63. void gwthread_sleep(double seconds);
  64. /*
  65.  * Check wheather this thread should handle the given signal.
  66.  * Since signals are thread specific, this needs to be handled
  67.  * by the thread code here.  This is mostly to cope with
  68.  * "interesting" implementations of "pthreads"
  69.  */
  70. int gwthread_shouldhandlesignal(int signal);
  71. /* Dump the current signal mask for this thread. This will print out a
  72.  * set of debug messages that state the signal handling status for the
  73.  * first 32 signals on the current system. Return -1 if something goes
  74.  * wrong.
  75.  *
  76.  * Debugging purposes mostly so it can be ignored on platforms
  77.  * where this isn't applicable.
  78.  */
  79. int gwthread_dumpsigmask(void);
  80. #endif