www.pudn.com > QQ_Sniffer.rar > semaphore.h


/* 
 * Module: semaphore.h 
 * 
 * Purpose: 
 *	Semaphores aren't actually part of the PThreads standard. 
 *	They are defined by the POSIX Standard: 
 * 
 *		POSIX 1003.1b-1993	(POSIX.1b) 
 * 
 * -------------------------------------------------------------------------- 
 * 
 *      Pthreads-win32 - POSIX Threads Library for Win32 
 *      Copyright(C) 1998 John E. Bossom 
 *      Copyright(C) 1999,2003 Pthreads-win32 contributors 
 *  
 *      Contact Email: rpj@callisto.canberra.edu.au 
 *  
 *      The current list of contributors is contained 
 *      in the file CONTRIBUTORS included with the source 
 *      code distribution. The list can also be seen at the 
 *      following World Wide Web location: 
 *      http://sources.redhat.com/pthreads-win32/contributors.html 
 *  
 *      This library is free software; you can redistribute it and/or 
 *      modify it under the terms of the GNU Lesser General Public 
 *      License as published by the Free Software Foundation; either 
 *      version 2 of the License, or (at your option) any later version. 
 *  
 *      This library is distributed in the hope that it will be useful, 
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
 *      Lesser General Public License for more details. 
 *  
 *      You should have received a copy of the GNU Lesser General Public 
 *      License along with this library in the file COPYING.LIB; 
 *      if not, write to the Free Software Foundation, Inc., 
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 
 */ 
#if !defined( SEMAPHORE_H ) 
#define SEMAPHORE_H 
 
#undef PTW32_LEVEL 
 
#if defined(_POSIX_SOURCE) 
#define PTW32_LEVEL 0 
/* Early POSIX */ 
#endif 
 
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309 
#undef PTW32_LEVEL 
#define PTW32_LEVEL 1 
/* Include 1b, 1c and 1d */ 
#endif 
 
#if defined(INCLUDE_NP) 
#undef PTW32_LEVEL 
#define PTW32_LEVEL 2 
/* Include Non-Portable extensions */ 
#endif 
 
#define PTW32_LEVEL_MAX 3 
 
#if !defined(PTW32_LEVEL) 
#define PTW32_LEVEL PTW32_LEVEL_MAX 
/* Include everything */ 
#endif 
 
#if __GNUC__ && ! defined (__declspec) 
# error Please upgrade your GNU compiler to one that supports __declspec. 
#endif 
 
/* 
 * When building the DLL code, you should define PTW32_BUILD so that 
 * the variables/functions are exported correctly. When using the DLL, 
 * do NOT define PTW32_BUILD, and then the variables/functions will 
 * be imported correctly. 
 */ 
#ifdef PTW32_BUILD 
# define PTW32_DLLPORT __declspec (dllexport) 
#else 
# define PTW32_DLLPORT __declspec (dllimport) 
#endif 
 
 
/* 
 * This is a duplicate of what is in the autoconf config.h, 
 * which is only used when building the pthread-win32 libraries. 
 */ 
 
#ifndef PTW32_CONFIG_H 
#  if defined(WINCE) 
#    define NEED_ERRNO 
#    define NEED_SEM 
#  endif 
#  if defined(_UWIN) || defined(__MINGW32__) 
#    define HAVE_MODE_T 
#  endif 
#endif 
 
/* 
 * 
 */ 
 
#if PTW32_LEVEL >= PTW32_LEVEL_MAX 
#ifdef NEED_ERRNO 
#include "need_errno.h" 
#else 
#include  
#endif 
#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */ 
 
#define _POSIX_SEMAPHORES 
 
#ifdef __cplusplus 
extern "C" 
{ 
#endif				/* __cplusplus */ 
 
#ifndef HAVE_MODE_T 
typedef unsigned int mode_t; 
#endif 
 
 
typedef struct sem_t_ * sem_t; 
 
PTW32_DLLPORT int sem_init (sem_t * sem, 
			    int pshared, 
			    unsigned int value); 
 
PTW32_DLLPORT int sem_destroy (sem_t * sem); 
 
PTW32_DLLPORT int sem_trywait (sem_t * sem); 
 
PTW32_DLLPORT int sem_wait (sem_t * sem); 
 
PTW32_DLLPORT int sem_timedwait (sem_t * sem, 
				 const struct timespec * abstime); 
 
PTW32_DLLPORT int sem_post (sem_t * sem); 
 
PTW32_DLLPORT int sem_post_multiple (sem_t * sem, 
				     int count); 
 
PTW32_DLLPORT int sem_open (const char * name, 
			    int oflag, 
			    mode_t mode, 
			    unsigned int value); 
 
PTW32_DLLPORT int sem_close (sem_t * sem); 
 
PTW32_DLLPORT int sem_unlink (const char * name); 
 
PTW32_DLLPORT int sem_getvalue (sem_t * sem, 
				int * sval); 
 
#ifdef __cplusplus 
}				/* End of extern "C" */ 
#endif				/* __cplusplus */ 
 
#undef PTW32_LEVEL 
#undef PTW32_LEVEL_MAX 
 
#endif				/* !SEMAPHORE_H */