⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my_pthread.h

📁 蓝牙GPS通讯应用程序源文件gpsdrive.tar.gz
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB      This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library 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   Library General Public License for more details.      You should have received a copy of the GNU Library General Public   License along with this library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,   MA 02111-1307, USA *//* Defines to make different thread packages compatible */#ifndef _my_pthread_h#define _my_pthread_h#include <errno.h>#ifndef ETIME#define ETIME ETIMEDOUT				/* For FreeBSD */#endif#ifdef  __cplusplusextern "C" {#endif /* __cplusplus */ #if defined(__WIN__) || defined(OS2)#ifdef OS2typedef ULONG     HANDLE;typedef ULONG     DWORD;typedef int sigset_t;#endif#ifdef OS2typedef HMTX             pthread_mutex_t;#elsetypedef CRITICAL_SECTION pthread_mutex_t;#endiftypedef HANDLE		 pthread_t;typedef struct thread_attr {    DWORD dwStackSize ;    DWORD dwCreatingFlag ;    int priority ;} pthread_attr_t ;typedef struct { int dummy; } pthread_condattr_t;/* Implementation of posix conditions */typedef struct st_pthread_link {  DWORD thread_id;  struct st_pthread_link *next;} pthread_link;typedef struct {  uint32 waiting;#ifdef OS2  HEV    semaphore;#else  HANDLE semaphore;#endif} pthread_cond_t;#ifndef OS2struct timespec {		/* For pthread_cond_timedwait() */    time_t tv_sec;    long tv_nsec;};#endiftypedef int pthread_mutexattr_t;#define win_pthread_self my_thread_var->pthread_self#ifdef OS2#define pthread_handler_decl(A,B) void * _Optlink A(void *B)typedef void * (_Optlink *pthread_handler)(void *);#else#define pthread_handler_decl(A,B) void * __cdecl A(void *B)typedef void * (__cdecl *pthread_handler)(void *);#endifvoid win_pthread_init(void);int win_pthread_setspecific(void *A,void *B,uint length);int pthread_create(pthread_t *,pthread_attr_t *,pthread_handler,void *);int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,			   struct timespec *abstime);int pthread_cond_signal(pthread_cond_t *cond);int pthread_cond_broadcast(pthread_cond_t *cond);int pthread_cond_destroy(pthread_cond_t *cond);int pthread_attr_init(pthread_attr_t *connect_att);int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack);int pthread_attr_setprio(pthread_attr_t *connect_att,int priority);int pthread_attr_destroy(pthread_attr_t *connect_att);struct tm *localtime_r(const time_t *timep,struct tm *tmp);void pthread_exit(void *a);	 /* was #define pthread_exit(A) ExitThread(A)*/#ifndef OS2#define ETIMEDOUT 145		    /* Win32 doesn't have this */#define getpid() GetCurrentThreadId()#endif#define pthread_self() win_pthread_self#define HAVE_LOCALTIME_R		1#define _REENTRANT			1#define HAVE_PTHREAD_ATTR_SETSTACKSIZE	1#ifdef USE_TLS					/* For LIBMYSQL.DLL */#undef SAFE_MUTEX				/* This will cause conflicts */#define pthread_key(T,V)  DWORD V#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF)#define pthread_getspecific(A) (TlsGetValue(A))#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A))#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V))#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V)))#define pthread_setspecific(A,B) (!TlsSetValue((A),(B)))#else#define pthread_key(T,V) __declspec(thread) T V#define pthread_key_create(A,B) pthread_dummy(0)#define pthread_getspecific(A) (&(A))#define my_pthread_getspecific(T,A) (&(A))#define my_pthread_getspecific_ptr(T,V) (V)#define my_pthread_setspecific_ptr(T,V) ((T)=(V),0)#define pthread_setspecific(A,B) win_pthread_setspecific(&(A),(B),sizeof(A))#endif /* USE_TLS */#define pthread_equal(A,B) ((A) == (B))#ifdef OS2int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);int pthread_mutex_lock (pthread_mutex_t *);int pthread_mutex_unlock (pthread_mutex_t *);int pthread_mutex_destroy (pthread_mutex_t *);#define my_pthread_setprio(A,B)  DosSetPriority(PRTYS_THREAD,PRTYC_NOCHANGE, B, A)#define pthread_kill(A,B) raise(B)#define pthread_exit(A) pthread_dummy()#else#define pthread_mutex_init(A,B)  InitializeCriticalSection(A)#define pthread_mutex_lock(A)	 (EnterCriticalSection(A),0)#define pthread_mutex_unlock(A)  LeaveCriticalSection(A)#define pthread_mutex_destroy(A) DeleteCriticalSection(A)#define my_pthread_setprio(A,B)  SetThreadPriority(GetCurrentThread(), (B))#define pthread_kill(A,B) pthread_dummy(0)#endif /* OS2 *//* Dummy defines for easier code */#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)#define my_pthread_attr_setprio(A,B) pthread_attr_setprio(A,B)#define pthread_attr_setscope(A,B)#define pthread_detach_this_thread()#define pthread_condattr_init(A)#define pthread_condattr_destroy(A)/*Irena: compiler does not like this: *//*#define my_pthread_getprio(pthread_t thread_id) pthread_dummy(0) */#define my_pthread_getprio(thread_id) pthread_dummy(0)#elif defined(HAVE_UNIXWARE7_THREADS)#include <thread.h>#include <synch.h>#ifndef _REENTRANT#define _REENTRANT#endif#define HAVE_NONPOSIX_SIGWAIT#define pthread_t thread_t#define pthread_cond_t cond_t#define pthread_mutex_t mutex_t#define pthread_key_t thread_key_ttypedef int pthread_attr_t;			/* Needed by Unixware 7.0.0 */#define pthread_key_create(A,B) thr_keycreate((A),(B))#define pthread_handler_decl(A,B) void *A(void *B)#define pthread_key(T,V) pthread_key_t Vvoid *	my_pthread_getspecific_imp(pthread_key_t key);#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B))#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,V)#define pthread_setspecific(A,B) thr_setspecific(A,B)#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,V)#define pthread_create(A,B,C,D) thr_create(NULL,65536L,(C),(D),THR_DETACHED,(A))#define pthread_cond_init(a,b) cond_init((a),USYNC_THREAD,NULL)#define pthread_cond_destroy(a) cond_destroy(a)#define pthread_cond_signal(a) cond_signal(a)#define pthread_cond_wait(a,b) cond_wait((a),(b))#define pthread_cond_timedwait(a,b,c) cond_timedwait((a),(b),(c))#define pthread_cond_broadcast(a) cond_broadcast(a)#define pthread_mutex_init(a,b) mutex_init((a),USYNC_THREAD,NULL)#define pthread_mutex_lock(a) mutex_lock(a)#define pthread_mutex_unlock(a) mutex_unlock(a)#define pthread_mutex_destroy(a) mutex_destroy(a)#define pthread_self() thr_self()#define pthread_exit(A) thr_exit(A)#define pthread_equal(A,B) (((A) == (B)) ? 1 : 0)#define pthread_kill(A,B) thr_kill((A),(B))#define HAVE_PTHREAD_KILL#define pthread_sigmask(A,B,C) thr_sigsetmask((A),(B),(C))extern int my_sigwait(const sigset_t *set,int *sig);#define pthread_detach_this_thread() pthread_dummy(0)#define pthread_attr_init(A) pthread_dummy(0)#define pthread_attr_destroy(A) pthread_dummy(0)#define pthread_attr_setscope(A,B) pthread_dummy(0)#define pthread_attr_setdetachstate(A,B) pthread_dummy(0)#define my_pthread_setprio(A,B) pthread_dummy (0)#define my_pthread_getprio(A) pthread_dummy (0)#define my_pthread_attr_setprio(A,B) pthread_dummy(0)#else /* Normal threads */#ifdef HAVE_rts_threads#define sigwait org_sigwait#include <signal.h>#undef sigwait#endif#undef _REENTRANT			/* Fix if _REENTRANT is in pthread.h */#include <pthread.h>#ifndef _REENTRANT#define _REENTRANT#endif#ifdef HAVE_THR_SETCONCURRENCY#include <thread.h>			/* Probably solaris */#endif#ifdef HAVE_SCHED_H#include <sched.h>#endif#ifdef HAVE_SYNCH_H#include <synch.h>#endif#if defined(__EMX__) && (!defined(EMX_PTHREAD_REV) || (EMX_PTHREAD_REV < 2))#error Requires at least rev 2 of EMX pthreads library.#endifextern int my_pthread_getprio(pthread_t thread_id);#define pthread_key(T,V) pthread_key_t V#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V))#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V))#define pthread_detach_this_thread()#define pthread_handler_decl(A,B) void *A(void *B)typedef void *(* pthread_handler)(void *);/* Test first for RTS or FSU threads */#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM)#define HAVE_rts_threadsextern int my_pthread_create_detached;#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C))#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached#define PTHREAD_SCOPE_SYSTEM  PTHREAD_SCOPE_GLOBAL#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL#define USE_ALARM_THREAD#elif defined(HAVE_mit_thread)#define USE_ALARM_THREAD#undef	HAVE_LOCALTIME_R#define HAVE_LOCALTIME_R#undef	HAVE_PTHREAD_ATTR_SETSCOPE#define HAVE_PTHREAD_ATTR_SETSCOPE#undef HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE	/* If we are running linux */#undef HAVE_RWLOCK_T#undef HAVE_RWLOCK_INIT#undef HAVE_PTHREAD_RWLOCK_RDLOCK#undef HAVE_SNPRINTF#define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))#define signal(A,B) pthread_signal((A),(void (*)(int)) (B))#define my_pthread_attr_setprio(A,B)#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910int sigwait(sigset_t *set, int *sig);#endif#if defined(HAVE_UNIXWARE7_POSIX)#undef HAVE_NONPOSIX_SIGWAIT#define HAVE_NONPOSIX_SIGWAIT	/* sigwait takes only 1 argument */#endif#ifndef HAVE_NONPOSIX_SIGWAIT#define my_sigwait(A,B) sigwait((A),(B))#elseint my_sigwait(const sigset_t *set,int *sig);#endif#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT#ifndef SAFE_MUTEX#define pthread_mutex_init(a,b) my_pthread_mutex_init((a),(b))extern int my_pthread_mutex_init(pthread_mutex_t *mp,				 const pthread_mutexattr_t *attr);#endif /* SAFE_MUTEX */#define pthread_cond_init(a,b) my_pthread_cond_init((a),(b))extern int my_pthread_cond_init(pthread_cond_t *mp,				const pthread_condattr_t *attr);#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -