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

📄 my_pthread.h

📁 vc连接mysql的封装类
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 2000 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program 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 General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; 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  __cplusplus#define EXTERNC extern "C"extern "C" {#else#define EXTERNC#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_t EXTERNC void * _Optlinktypedef void * (_Optlink *pthread_handler)(void *);#else#define pthread_handler_t EXTERNC void * __cdecltypedef 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);struct tm *gmtime_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_key_delete(A) TlsFree(A)#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_key_delete(A) 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 OS2extern int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);extern int pthread_mutex_lock (pthread_mutex_t *);extern int pthread_mutex_unlock (pthread_mutex_t *);extern 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),0)#define pthread_mutex_lock(A)	 (EnterCriticalSection(A),0)#define pthread_mutex_trylock(A) (WaitForSingleObject((A), 0) == WAIT_TIMEOUT)#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_key_delete(A) thr_keydelete(A)#define pthread_handler_t EXTERNC void *#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#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.#endif#ifdef __NETWARE__void my_pthread_exit(void *status);#define pthread_exit(A) my_pthread_exit(A)#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_t EXTERNC void *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_GMTIME_R#define HAVE_GMTIME_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 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#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 */#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK)#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C))#endif#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)int sigwait(sigset_t *setp, int *sigp);		/* Use our implemention */#endif/*  We define my_sigset() and use that instead of the system sigset() so that  we can favor an implementation based on sigaction(). On some systems, such  as Mac OS X, sigset() results in flags such as SA_RESTART being set, and  we want to make sure that no such flags are set.*/#if defined(HAVE_SIGACTION) && !defined(my_sigset)#define my_sigset(A,B) do { struct sigaction s; sigset_t set;              \                            sigemptyset(&set);                             \                            s.sa_handler = (B);                            \                            s.sa_mask    = set;                            \                            s.sa_flags   = 0;                              \                            sigaction((A), &s, (struct sigaction *) NULL); \                          } while (0)#elif defined(HAVE_SIGSET) && !defined(my_sigset)#define my_sigset(A,B) sigset((A),(B))#elif !defined(my_sigset)#define my_sigset(A,B) signal((A),(B))#endif#ifndef my_pthread_setprio#if defined(HAVE_PTHREAD_SETPRIO_NP)		/* FSU threads */#define my_pthread_setprio(A,B) pthread_setprio_np((A),(B))#elif defined(HAVE_PTHREAD_SETPRIO)#define my_pthread_setprio(A,B) pthread_setprio((A),(B))#elseextern void my_pthread_setprio(pthread_t thread_id,int prior);#endif#endif#ifndef my_pthread_attr_setprio#ifdef HAVE_PTHREAD_ATTR_SETPRIO

⌨️ 快捷键说明

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