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

📄 pthread.h

📁 超强的嵌入式GUI系统
💻 H
📖 第 1 页 / 共 3 页
字号:
/* * POSIX 1003.1-2001 Limits * =========================== * * These limits are normally set in <limits.h>, which is not provided with * pthreads-win32. * * PTHREAD_DESTRUCTOR_ITERATIONS *                      Maximum number of attempts to destroy *                      a thread's thread-specific data on *                      termination (must be at least 4) * * PTHREAD_KEYS_MAX *                      Maximum number of thread-specific data keys *                      available per process (must be at least 128) * * PTHREAD_STACK_MIN *                      Minimum supported stack size for a thread * * PTHREAD_THREADS_MAX *                      Maximum number of threads supported per *                      process (must be at least 64). * * SEM_NSEMS_MAX *                      The maximum number of semaphores a process can have. *                      (must be at least 256) * * SEM_VALUE_MAX *                      The maximum value a semaphore can have. *                      (must be at least 32767) * */#undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS     4#undef PTHREAD_DESTRUCTOR_ITERATIONS#define PTHREAD_DESTRUCTOR_ITERATIONS           _POSIX_THREAD_DESTRUCTOR_ITERATIONS#undef _POSIX_THREAD_KEYS_MAX#define _POSIX_THREAD_KEYS_MAX                  128#undef PTHREAD_KEYS_MAX#define PTHREAD_KEYS_MAX                        _POSIX_THREAD_KEYS_MAX#undef PTHREAD_STACK_MIN#define PTHREAD_STACK_MIN                       0#undef _POSIX_THREAD_THREADS_MAX#define _POSIX_THREAD_THREADS_MAX               64  /* Arbitrary value */#undef PTHREAD_THREADS_MAX#define PTHREAD_THREADS_MAX                     2019#undef _POSIX_SEM_NSEMS_MAX#define _POSIX_SEM_NSEMS_MAX                    256  /* Arbitrary value */#undef SEM_NSEMS_MAX#define SEM_NSEMS_MAX                           1024#undef _POSIX_SEM_VALUE_MAX#define _POSIX_SEM_VALUE_MAX                    32767#undef SEM_VALUE_MAX#define SEM_VALUE_MAX                           INT_MAX#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. */#ifndef PTW32_STATIC_LIB#  ifdef PTW32_BUILD#    define PTW32_DLLPORT __declspec (dllexport)#  else#    define PTW32_DLLPORT __declspec (dllimport)#  endif#else#  define PTW32_DLLPORT#endif/* * The Open Watcom C/C++ compiler uses a non-standard calling convention * that passes function args in registers unless __cdecl is explicitly specified * in exposed function prototypes. * * We force all calls to cdecl even though this could slow Watcom code down * slightly. If you know that the Watcom compiler will be used to build both * the DLL and application, then you can probably define this as a null string. * Remember that pthread.h (this file) is used for both the DLL and application builds. */#define PTW32_CDECL __cdecl#if defined(_UWIN) && PTW32_LEVEL >= PTW32_LEVEL_MAX#   include     <sys/types.h>#else/* * Generic handle type - intended to extend uniqueness beyond * that available with a simple pointer. It should scale for either * IA-32 or IA-64. */typedef struct {    void * p;                   /* Pointer to actual object */    unsigned int x;             /* Extra information - reuse count etc */} ptw32_handle_t;typedef ptw32_handle_t pthread_t;typedef struct pthread_attr_t_ * pthread_attr_t;typedef struct pthread_once_t_ pthread_once_t;typedef struct pthread_key_t_ * pthread_key_t;typedef struct pthread_mutex_t_ * pthread_mutex_t;typedef struct pthread_mutexattr_t_ * pthread_mutexattr_t;typedef struct pthread_cond_t_ * pthread_cond_t;typedef struct pthread_condattr_t_ * pthread_condattr_t;#endiftypedef struct pthread_rwlock_t_ * pthread_rwlock_t;typedef struct pthread_rwlockattr_t_ * pthread_rwlockattr_t;typedef struct pthread_spinlock_t_ * pthread_spinlock_t;typedef struct pthread_barrier_t_ * pthread_barrier_t;typedef struct pthread_barrierattr_t_ * pthread_barrierattr_t;/* * ==================== * ==================== * POSIX Threads * ==================== * ==================== */enum {/* * pthread_attr_{get,set}detachstate */  PTHREAD_CREATE_JOINABLE       = 0,  /* Default */  PTHREAD_CREATE_DETACHED       = 1,/* * pthread_attr_{get,set}inheritsched */  PTHREAD_INHERIT_SCHED         = 0,  PTHREAD_EXPLICIT_SCHED        = 1,  /* Default *//* * pthread_{get,set}scope */  PTHREAD_SCOPE_PROCESS         = 0,  PTHREAD_SCOPE_SYSTEM          = 1,  /* Default *//* * pthread_setcancelstate paramters */  PTHREAD_CANCEL_ENABLE         = 0,  /* Default */  PTHREAD_CANCEL_DISABLE        = 1,/* * pthread_setcanceltype parameters */  PTHREAD_CANCEL_ASYNCHRONOUS   = 0,  PTHREAD_CANCEL_DEFERRED       = 1,  /* Default *//* * pthread_mutexattr_{get,set}pshared * pthread_condattr_{get,set}pshared */  PTHREAD_PROCESS_PRIVATE       = 0,  PTHREAD_PROCESS_SHARED        = 1,/* * pthread_barrier_wait */  PTHREAD_BARRIER_SERIAL_THREAD = -1};/* * ==================== * ==================== * Cancelation * ==================== * ==================== */#define PTHREAD_CANCELED       ((void *) -1)/* * ==================== * ==================== * Once Key * ==================== * ==================== */#define PTHREAD_ONCE_INIT       { PTW32_FALSE, 0, 0, 0}struct pthread_once_t_{  int          done;        /* indicates if user function has been executed */  void *       lock;  int          reserved1;  int          reserved2;};/* * ==================== * ==================== * Object initialisers * ==================== * ==================== */#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) -1)#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t) -2)#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t) -3)/* * Compatibility with LinuxThreads */#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP PTHREAD_ERRORCHECK_MUTEX_INITIALIZER#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) -1)#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) -1)#define PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t) -1)/* * Mutex types. */enum{  /* Compatibility with LinuxThreads */  PTHREAD_MUTEX_FAST_NP,  PTHREAD_MUTEX_RECURSIVE_NP,  PTHREAD_MUTEX_ERRORCHECK_NP,  PTHREAD_MUTEX_TIMED_NP = PTHREAD_MUTEX_FAST_NP,  PTHREAD_MUTEX_ADAPTIVE_NP = PTHREAD_MUTEX_FAST_NP,  /* For compatibility with POSIX */  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_FAST_NP,  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL};typedef struct ptw32_cleanup_t ptw32_cleanup_t;#if defined(_MSC_VER)/* Disable MSVC 'anachronism used' warning */#pragma warning( disable : 4229 )#endiftypedef void (* PTW32_CDECL ptw32_cleanup_callback_t)(void *);#if defined(_MSC_VER)#pragma warning( default : 4229 )#endifstruct ptw32_cleanup_t{  ptw32_cleanup_callback_t routine;  void *arg;  struct ptw32_cleanup_t *prev;};#ifdef __CLEANUP_SEH        /*         * WIN32 SEH version of cancel cleanup.         */#define pthread_cleanup_push( _rout, _arg ) \        { \            ptw32_cleanup_t     _cleanup; \            \        _cleanup.routine        = (ptw32_cleanup_callback_t)(_rout); \            _cleanup.arg        = (_arg); \            __try \              { \#define pthread_cleanup_pop( _execute ) \              } \            __finally \                { \                    if( _execute || AbnormalTermination()) \                      { \                          (*(_cleanup.routine))( _cleanup.arg ); \                      } \                } \        }#else /* __CLEANUP_SEH */#ifdef __CLEANUP_C        /*         * C implementation of PThreads cancel cleanup         */#define pthread_cleanup_push( _rout, _arg ) \        { \            ptw32_cleanup_t     _cleanup; \            \            ptw32_push_cleanup( &_cleanup, (ptw32_cleanup_callback_t) (_rout), (_arg) ); \#define pthread_cleanup_pop( _execute ) \            (void) ptw32_pop_cleanup( _execute ); \        }#else /* __CLEANUP_C */#ifdef __CLEANUP_CXX        /*         * C++ version of cancel cleanup.         * - John E. Bossom.         */        class PThreadCleanup {          /*           * PThreadCleanup           *           * Purpose           *      This class is a C++ helper class that is           *      used to implement pthread_cleanup_push/           *      pthread_cleanup_pop.           *      The destructor of this class automatically           *      pops the pushed cleanup routine regardless           *      of how the code exits the scope           *      (i.e. such as by an exception)           */      ptw32_cleanup_callback_t cleanUpRout;          void    *       obj;          int             executeIt;        public:          PThreadCleanup() :            cleanUpRout( 0 ),            obj( 0 ),            executeIt( 0 )            /*             * No cleanup performed             */            {            }          PThreadCleanup(             ptw32_cleanup_callback_t routine,                         void    *       arg ) :            cleanUpRout( routine ),            obj( arg ),            executeIt( 1 )            /*             * Registers a cleanup routine for 'arg'             */            {            }          ~PThreadCleanup()            {              if ( executeIt && ((void *) cleanUpRout != (void *) 0) )                {                  (void) (*cleanUpRout)( obj );                }            }          void execute( int exec )            {              executeIt = exec;            }        };        /*         * C++ implementation of PThreads cancel cleanup;         * This implementation takes advantage of a helper         * class who's destructor automatically calls the         * cleanup routine if we exit our scope weirdly         */#define pthread_cleanup_push( _rout, _arg ) \        { \            PThreadCleanup  cleanup((ptw32_cleanup_callback_t)(_rout), \                                    (void *) (_arg) );#define pthread_cleanup_pop( _execute ) \            cleanup.execute( _execute ); \        }#else#error ERROR [__FILE__, line __LINE__]: Cleanup type undefined.#endif /* __CLEANUP_CXX */#endif /* __CLEANUP_C */#endif /* __CLEANUP_SEH *//* * =============== * =============== * Methods * =============== * =============== *//* * PThread Attribute Functions */PTW32_DLLPORT int PTW32_CDECL pthread_attr_init (pthread_attr_t * attr);PTW32_DLLPORT int PTW32_CDECL pthread_attr_destroy (pthread_attr_t * attr);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getdetachstate (const pthread_attr_t * attr,                                         int *detachstate);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstackaddr (const pthread_attr_t * attr,                                       void **stackaddr);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstacksize (const pthread_attr_t * attr,                                       size_t * stacksize);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setdetachstate (pthread_attr_t * attr,                                         int detachstate);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstackaddr (pthread_attr_t * attr,                                       void *stackaddr);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstacksize (pthread_attr_t * attr,                                       size_t stacksize);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedparam (const pthread_attr_t *attr,                                        struct sched_param *param);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr,                                        const struct sched_param *param);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *,                                         int);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (pthread_attr_t *,                                         int *);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr,                                         int inheritsched);PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(pthread_attr_t * attr,                                         int * inheritsched);PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *,                                   int);

⌨️ 快捷键说明

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