My Project: dynamics.mod/NewtonDynamics/source/pthreads.2/pthread.h File Reference

My Project

Classes | Macros | Typedefs | Enumerations | Functions
pthread.h File Reference
`#include <time.h>`
`#include <limits.h>`
`#include <errno.h>`
`#include <sched.h>`

Go to the source code of this file.

## Classes

struct | timespec
struct | ptw32_handle_t
struct | pthread_once_t_
struct | ptw32_cleanup_t

## Macros

#define | PTW32_VERSION 2,9,1,0
#define | PTW32_VERSION_STRING "2, 9, 1, 0\0"
#define | __CLEANUP_C
#define | PTW32_LEVEL_MAX 3
#define | PTW32_LEVEL PTW32_LEVEL_MAX
#define | ENOTSUP 48 /* This is the value in Solaris. */
#define | ETIMEDOUT 10060 /* Same as WSAETIMEDOUT */
#define | ENOSYS 140 /* Semi-arbitrary value */
#define | EDEADLK 36 /* This is the value in MSVC. */
#define | EOWNERDEAD 43
#define | ENOTRECOVERABLE 44
#define | PTW32__HANDLE_DEF
#define | HANDLE void *
#define | PTW32__DWORD_DEF
#define | DWORD unsigned long
#define | HAVE_STRUCT_TIMESPEC
#define | _TIMESPEC_DEFINED
#define | SIG_BLOCK 0
#define | SIG_UNBLOCK 1
#define | SIG_SETMASK 2
#define | _POSIX_THREADS 200809L
#define | _POSIX_READER_WRITER_LOCKS 200809L
#define | _POSIX_SPIN_LOCKS 200809L
#define | _POSIX_BARRIERS 200809L
#define | _POSIX_THREAD_SAFE_FUNCTIONS 200809L
#define | _POSIX_THREAD_ATTR_STACKSIZE 200809L
#define | _POSIX_THREAD_ATTR_STACKADDR -1
#define | _POSIX_THREAD_PRIO_INHERIT -1
#define | _POSIX_THREAD_PRIO_PROTECT -1
#define | _POSIX_THREAD_PRIORITY_SCHEDULING -1
#define | _POSIX_THREAD_PROCESS_SHARED -1
#define | _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
#define | PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
#define | _POSIX_THREAD_KEYS_MAX 128
#define | PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX
#define | PTHREAD_STACK_MIN 0
#define | _POSIX_THREAD_THREADS_MAX 64
#define | PTHREAD_THREADS_MAX 2019
#define | _POSIX_SEM_NSEMS_MAX 256
#define | SEM_NSEMS_MAX 1024
#define | _POSIX_SEM_VALUE_MAX 32767
#define | SEM_VALUE_MAX INT_MAX
#define | PTW32_DLLPORT __declspec (dllimport)
#define | PTW32_CDECL __cdecl
#define | PTHREAD_CANCELED ((void *)(size_t) -1)
#define | PTHREAD_ONCE_INIT { PTW32_FALSE, 0, 0, 0}
#define | PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -1)
#define | PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -2)
#define | PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -3)
#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)(size_t) -1)
#define | PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t)(size_t) -1)
#define | PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t)(size_t) -1)
#define | pthread_cleanup_push(_rout, _arg)
#define | pthread_cleanup_pop(_execute)

## Typedefs

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
typedef 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
typedef struct ptw32_cleanup_t | ptw32_cleanup_t
typedef void(* | PTW32_CDECL) (void *)

## Enumerations

enum | { PTW32_FALSE = 0, PTW32_TRUE = (! PTW32_FALSE) }

enum

{
PTHREAD_CREATE_JOINABLE = 0, PTHREAD_CREATE_DETACHED = 1, PTHREAD_INHERIT_SCHED = 0, PTHREAD_EXPLICIT_SCHED = 1,
PTHREAD_SCOPE_PROCESS = 0, PTHREAD_SCOPE_SYSTEM = 1, PTHREAD_CANCEL_ENABLE = 0, PTHREAD_CANCEL_DISABLE = 1,
PTHREAD_CANCEL_ASYNCHRONOUS = 0, PTHREAD_CANCEL_DEFERRED = 1, PTHREAD_PROCESS_PRIVATE = 0, PTHREAD_PROCESS_SHARED = 1,
PTHREAD_MUTEX_STALLED = 0, PTHREAD_MUTEX_ROBUST = 1, PTHREAD_BARRIER_SERIAL_THREAD = -1
}

enum

{
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, 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
}

enum | ptw32_features { PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE = 0x0001, PTW32_ALERTABLE_ASYNC_CANCEL = 0x0002 }

## 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 (const 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 (const pthread_attr_t *attr, int *inheritsched)
PTW32_DLLPORT int PTW32_CDECL | pthread_attr_setscope (pthread_attr_t *, int)
PTW32_DLLPORT int PTW32_CDECL | pthread_attr_getscope (const pthread_attr_t *, int *)
PTW32_DLLPORT int PTW32_CDECL | pthread_create (pthread_t *tid, const pthread_attr_t *attr, void *(PTW32_CDECL *start)(void *), void *arg)
PTW32_DLLPORT int PTW32_CDECL | pthread_detach (pthread_t tid)
PTW32_DLLPORT int PTW32_CDECL | pthread_equal (pthread_t t1, pthread_t t2)
PTW32_DLLPORT void PTW32_CDECL | pthread_exit (void *value_ptr)
PTW32_DLLPORT int PTW32_CDECL | pthread_join (pthread_t thread, void **value_ptr)
PTW32_DLLPORT pthread_t PTW32_CDECL | pthread_self (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_cancel (pthread_t thread)
PTW32_DLLPORT int PTW32_CDECL | pthread_setcancelstate (int state, int *oldstate)
PTW32_DLLPORT int PTW32_CDECL | pthread_setcanceltype (int type, int *oldtype)
PTW32_DLLPORT void PTW32_CDECL | pthread_testcancel (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_once (pthread_once_t *once_control, void(PTW32_CDECL *init_routine)(void))
PTW32_DLLPORT ptw32_cleanup_t *PTW32_CDECL | ptw32_pop_cleanup (int execute)
PTW32_DLLPORT void PTW32_CDECL | ptw32_push_cleanup (ptw32_cleanup_t *cleanup, ptw32_cleanup_callback_t routine, void *arg)
PTW32_DLLPORT int PTW32_CDECL | pthread_key_create (pthread_key_t *key, void(PTW32_CDECL *destructor)(void *))
PTW32_DLLPORT int PTW32_CDECL | pthread_key_delete (pthread_key_t key)
PTW32_DLLPORT int PTW32_CDECL | pthread_setspecific (pthread_key_t key, const void *value)
PTW32_DLLPORT void *PTW32_CDECL | pthread_getspecific (pthread_key_t key)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_init (pthread_mutexattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_destroy (pthread_mutexattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_getpshared (const pthread_mutexattr_t *attr, int *pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_setpshared (pthread_mutexattr_t *attr, int pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_gettype (const pthread_mutexattr_t *attr, int *kind)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robust)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrierattr_init (pthread_barrierattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrierattr_destroy (pthread_barrierattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrierattr_getpshared (const pthread_barrierattr_t *attr, int *pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrierattr_setpshared (pthread_barrierattr_t *attr, int pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_destroy (pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_lock (pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_timedlock (pthread_mutex_t *mutex, const struct timespec *abstime)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_trylock (pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_unlock (pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutex_consistent (pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_spin_init (pthread_spinlock_t *lock, int pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_spin_destroy (pthread_spinlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_spin_lock (pthread_spinlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_spin_trylock (pthread_spinlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_spin_unlock (pthread_spinlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrier_init (pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrier_destroy (pthread_barrier_t *barrier)
PTW32_DLLPORT int PTW32_CDECL | pthread_barrier_wait (pthread_barrier_t *barrier)
PTW32_DLLPORT int PTW32_CDECL | pthread_condattr_init (pthread_condattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_condattr_destroy (pthread_condattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_condattr_getpshared (const pthread_condattr_t *attr, int *pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_condattr_setpshared (pthread_condattr_t *attr, int pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_destroy (pthread_cond_t *cond)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_signal (pthread_cond_t *cond)
PTW32_DLLPORT int PTW32_CDECL | pthread_cond_broadcast (pthread_cond_t *cond)
PTW32_DLLPORT int PTW32_CDECL | pthread_setschedparam (pthread_t thread, int policy, const struct sched_param *param)
PTW32_DLLPORT int PTW32_CDECL | pthread_getschedparam (pthread_t thread, int *policy, struct sched_param *param)
PTW32_DLLPORT int PTW32_CDECL | pthread_setconcurrency (int)
PTW32_DLLPORT int PTW32_CDECL | pthread_getconcurrency (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_init (pthread_rwlock_t *lock, const pthread_rwlockattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_destroy (pthread_rwlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_tryrdlock (pthread_rwlock_t *)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_trywrlock (pthread_rwlock_t *)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_rdlock (pthread_rwlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_timedrdlock (pthread_rwlock_t *lock, const struct timespec *abstime)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_wrlock (pthread_rwlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_timedwrlock (pthread_rwlock_t *lock, const struct timespec *abstime)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlock_unlock (pthread_rwlock_t *lock)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlockattr_init (pthread_rwlockattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlockattr_destroy (pthread_rwlockattr_t *attr)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr, int *pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared)
PTW32_DLLPORT int PTW32_CDECL | pthread_kill (pthread_t thread, int sig)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_setkind_np (pthread_mutexattr_t *attr, int kind)
PTW32_DLLPORT int PTW32_CDECL | pthread_mutexattr_getkind_np (pthread_mutexattr_t *attr, int *kind)
PTW32_DLLPORT int PTW32_CDECL | pthread_delay_np (struct timespec *interval)
PTW32_DLLPORT int PTW32_CDECL | pthread_num_processors_np (void)
PTW32_DLLPORT unsigned __int64 PTW32_CDECL | pthread_getunique_np (pthread_t thread)
PTW32_DLLPORT int PTW32_CDECL | pthread_win32_process_attach_np (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_win32_process_detach_np (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_win32_thread_attach_np (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_win32_thread_detach_np (void)
PTW32_DLLPORT int PTW32_CDECL | pthread_win32_test_features_np (int)
PTW32_DLLPORT void *PTW32_CDECL | pthread_timechange_handler_np (void *)
PTW32_DLLPORT HANDLE PTW32_CDECL | pthread_getw32threadhandle_np (pthread_t thread)
PTW32_DLLPORT DWORD PTW32_CDECL | pthread_getw32threadid_np (pthread_t thread)
PTW32_DLLPORT int PTW32_CDECL | pthreadCancelableWait (HANDLE waitHandle)
PTW32_DLLPORT int PTW32_CDECL | pthreadCancelableTimedWait (HANDLE waitHandle, DWORD timeout)
PTW32_DLLPORT DWORD PTW32_CDECL | ptw32_get_exception_services_code (void)

## Macro Definition Documentation

## § __CLEANUP_C

#define __CLEANUP_C

## § _POSIX_BARRIERS

#define _POSIX_BARRIERS 200809L

## § _POSIX_READER_WRITER_LOCKS

#define _POSIX_READER_WRITER_LOCKS 200809L

## § _POSIX_SEM_NSEMS_MAX

#define _POSIX_SEM_NSEMS_MAX 256

## § _POSIX_SEM_VALUE_MAX

#define _POSIX_SEM_VALUE_MAX 32767

## § _POSIX_SPIN_LOCKS

#define _POSIX_SPIN_LOCKS 200809L

## § _POSIX_THREAD_ATTR_STACKADDR

#define _POSIX_THREAD_ATTR_STACKADDR -1

## § _POSIX_THREAD_ATTR_STACKSIZE

#define _POSIX_THREAD_ATTR_STACKSIZE 200809L

## § _POSIX_THREAD_DESTRUCTOR_ITERATIONS

#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4

## § _POSIX_THREAD_KEYS_MAX

#define _POSIX_THREAD_KEYS_MAX 128

## § _POSIX_THREAD_PRIO_INHERIT

#define _POSIX_THREAD_PRIO_INHERIT -1

## § _POSIX_THREAD_PRIO_PROTECT

#define _POSIX_THREAD_PRIO_PROTECT -1

## § _POSIX_THREAD_PRIORITY_SCHEDULING

#define _POSIX_THREAD_PRIORITY_SCHEDULING -1

## § _POSIX_THREAD_PROCESS_SHARED

#define _POSIX_THREAD_PROCESS_SHARED -1

## § _POSIX_THREAD_SAFE_FUNCTIONS

#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L

## § _POSIX_THREAD_THREADS_MAX

#define _POSIX_THREAD_THREADS_MAX 64

## § _POSIX_THREADS

#define _POSIX_THREADS 200809L

## § _TIMESPEC_DEFINED

#define _TIMESPEC_DEFINED

## § DWORD

#define DWORD unsigned long

## § EDEADLK

#define EDEADLK 36 /* This is the value in MSVC. */

## § ENOSYS

#define ENOSYS 140 /* Semi-arbitrary value */

## § ENOTRECOVERABLE

#define ENOTRECOVERABLE 44

## § ENOTSUP

#define ENOTSUP 48 /* This is the value in Solaris. */

## § EOWNERDEAD

#define EOWNERDEAD 43

## § ETIMEDOUT

#define ETIMEDOUT 10060 /* Same as WSAETIMEDOUT */

## § HANDLE

#define HANDLE void *

## § HAVE_STRUCT_TIMESPEC

#define HAVE_STRUCT_TIMESPEC

## § PTHREAD_CANCELED

#define PTHREAD_CANCELED ((void *)(size_t) -1)

## § pthread_cleanup_pop

#define pthread_cleanup_pop | ( |  | _execute | ) |

Value:
(void) ptw32_pop_cleanup( _execute ); \
}
void
typedef void(dgApi *ConstraintsForceFeeback)(const dgConstraint &me
ptw32_pop_cleanup
PTW32_DLLPORT ptw32_cleanup_t *PTW32_CDECL ptw32_pop_cleanup(int execute)
Definition: cleanup.c:50

## § pthread_cleanup_push

#define pthread_cleanup_push | ( |  | _rout,
|  |  | _arg
| ) |  |

Value:
{ \
ptw32_cleanup_t _cleanup; \
\
ptw32_push_cleanup( &_cleanup, (ptw32_cleanup_callback_t) (_rout), (_arg) ); \
ptw32_push_cleanup
PTW32_DLLPORT void PTW32_CDECL ptw32_push_cleanup(ptw32_cleanup_t *cleanup, ptw32_cleanup_callback_t routine, void *arg)
Definition: cleanup.c:99

## § PTHREAD_COND_INITIALIZER

#define PTHREAD_COND_INITIALIZER ((pthread_cond_t)(size_t) -1)

## § PTHREAD_DESTRUCTOR_ITERATIONS

#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS

## § PTHREAD_ERRORCHECK_MUTEX_INITIALIZER

#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -3)

## § PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP

#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP PTHREAD_ERRORCHECK_MUTEX_INITIALIZER

## § PTHREAD_KEYS_MAX

#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX

## § PTHREAD_MUTEX_INITIALIZER

#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -1)

## § PTHREAD_ONCE_INIT

#define PTHREAD_ONCE_INIT { PTW32_FALSE, 0, 0, 0}

## § PTHREAD_RECURSIVE_MUTEX_INITIALIZER

#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t)(size_t) -2)

## § PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP

#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER

## § PTHREAD_RWLOCK_INITIALIZER

#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t)(size_t) -1)

## § PTHREAD_SPINLOCK_INITIALIZER

#define PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t)(size_t) -1)

## § PTHREAD_STACK_MIN

#define PTHREAD_STACK_MIN 0

## § PTHREAD_THREADS_MAX

#define PTHREAD_THREADS_MAX 2019

## § PTW32__DWORD_DEF

#define PTW32__DWORD_DEF

## § PTW32__HANDLE_DEF

#define PTW32__HANDLE_DEF

## § PTW32_CDECL

#define PTW32_CDECL __cdecl

## § PTW32_DLLPORT

#define PTW32_DLLPORT __declspec (dllimport)

## § PTW32_LEVEL

#define PTW32_LEVEL PTW32_LEVEL_MAX

## § PTW32_LEVEL_MAX

#define PTW32_LEVEL_MAX 3

## § PTW32_VERSION

#define PTW32_VERSION 2,9,1,0

## § PTW32_VERSION_STRING

#define PTW32_VERSION_STRING "2, 9, 1, 0\0"

## § SEM_NSEMS_MAX

#define SEM_NSEMS_MAX 1024

## § SEM_VALUE_MAX

#define SEM_VALUE_MAX INT_MAX

## § SIG_BLOCK

#define SIG_BLOCK 0

## § SIG_SETMASK

#define SIG_SETMASK 2

## § SIG_UNBLOCK

#define SIG_UNBLOCK 1

## Typedef Documentation

## § pthread_attr_t

typedef struct pthread_attr_t_* pthread_attr_t

## § pthread_barrier_t

typedef struct pthread_barrier_t_* pthread_barrier_t

## § pthread_barrierattr_t

typedef struct pthread_barrierattr_t_* pthread_barrierattr_t

## § pthread_cond_t

typedef struct pthread_cond_t_* pthread_cond_t

## § pthread_condattr_t

typedef struct pthread_condattr_t_* pthread_condattr_t

## § pthread_key_t

typedef struct pthread_key_t_* pthread_key_t

## § pthread_mutex_t

typedef struct pthread_mutex_t_* pthread_mutex_t

## § pthread_mutexattr_t

typedef struct pthread_mutexattr_t_* pthread_mutexattr_t

## § pthread_once_t

typedef struct pthread_once_t_ pthread_once_t

## § pthread_rwlock_t

typedef struct pthread_rwlock_t_* pthread_rwlock_t

## § pthread_rwlockattr_t

typedef struct pthread_rwlockattr_t_* pthread_rwlockattr_t

## § pthread_spinlock_t

typedef struct pthread_spinlock_t_* pthread_spinlock_t

## § pthread_t

typedef ptw32_handle_t pthread_t

## § PTW32_CDECL

typedef void(* PTW32_CDECL) (void *)

## § ptw32_cleanup_t

typedef struct ptw32_cleanup_t ptw32_cleanup_t

## Enumeration Type Documentation

## § anonymous enum

anonymous enum

Enumerator
PTW32_FALSE |
PTW32_TRUE |

## § anonymous enum

anonymous enum

Enumerator
PTHREAD_CREATE_JOINABLE |
PTHREAD_CREATE_DETACHED |
PTHREAD_INHERIT_SCHED |
PTHREAD_EXPLICIT_SCHED |
PTHREAD_SCOPE_PROCESS |
PTHREAD_SCOPE_SYSTEM |
PTHREAD_CANCEL_ENABLE |
PTHREAD_CANCEL_DISABLE |
PTHREAD_CANCEL_ASYNCHRONOUS |
PTHREAD_CANCEL_DEFERRED |
PTHREAD_PROCESS_PRIVATE |
PTHREAD_PROCESS_SHARED |
PTHREAD_MUTEX_STALLED |
PTHREAD_MUTEX_ROBUST |
PTHREAD_BARRIER_SERIAL_THREAD |

## § anonymous enum

anonymous enum

Enumerator
PTHREAD_MUTEX_FAST_NP |
PTHREAD_MUTEX_RECURSIVE_NP |
PTHREAD_MUTEX_ERRORCHECK_NP |
PTHREAD_MUTEX_TIMED_NP |
PTHREAD_MUTEX_ADAPTIVE_NP |
PTHREAD_MUTEX_NORMAL |
PTHREAD_MUTEX_RECURSIVE |
PTHREAD_MUTEX_ERRORCHECK |
PTHREAD_MUTEX_DEFAULT |

## § ptw32_features

enum ptw32_features

Enumerator
PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE |
PTW32_ALERTABLE_ASYNC_CANCEL |

## Function Documentation

## § pthread_attr_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_destroy | ( | pthread_attr_t * | attr | ) |

## § pthread_attr_getdetachstate()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getdetachstate | ( | const pthread_attr_t * | attr,
|  | int * | detachstate
| ) |  |

## § pthread_attr_getinheritsched()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched | ( | const pthread_attr_t * | attr,
|  | int * | inheritsched
| ) |  |

## § pthread_attr_getschedparam()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedparam | ( | const pthread_attr_t * | attr,
|  | struct sched_param * | param
| ) |  |

## § pthread_attr_getschedpolicy()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy | ( | const pthread_attr_t * | ,
|  | int * |
| ) |  |

## § pthread_attr_getscope()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getscope | ( | const pthread_attr_t * | ,
|  | int * |
| ) |  |

## § pthread_attr_getstackaddr()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstackaddr | ( | const pthread_attr_t * | attr,
|  | void ** | stackaddr
| ) |  |

## § pthread_attr_getstacksize()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstacksize | ( | const pthread_attr_t * | attr,
|  | size_t * | stacksize
| ) |  |

## § pthread_attr_init()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_init | ( | pthread_attr_t * | attr | ) |

## § pthread_attr_setdetachstate()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setdetachstate | ( | pthread_attr_t * | attr,
|  | int | detachstate
| ) |  |

## § pthread_attr_setinheritsched()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched | ( | pthread_attr_t * | attr,
|  | int | inheritsched
| ) |  |

## § pthread_attr_setschedparam()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam | ( | pthread_attr_t * | attr,
|  | const struct sched_param * | param
| ) |  |

## § pthread_attr_setschedpolicy()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy | ( | pthread_attr_t * | ,
|  | int |
| ) |  |

## § pthread_attr_setscope()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope | ( | pthread_attr_t * | ,
|  | int |
| ) |  |

## § pthread_attr_setstackaddr()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstackaddr | ( | pthread_attr_t * | attr,
|  | void * | stackaddr
| ) |  |

## § pthread_attr_setstacksize()

PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstacksize | ( | pthread_attr_t * | attr,
|  | size_t | stacksize
| ) |  |

## § pthread_barrier_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_barrier_destroy | ( | pthread_barrier_t * | barrier | ) |

## § pthread_barrier_init()

PTW32_DLLPORT int PTW32_CDECL pthread_barrier_init | ( | pthread_barrier_t * | barrier,
|  | const pthread_barrierattr_t * | attr,
|  | unsigned int | count
| ) |  |

## § pthread_barrier_wait()

PTW32_DLLPORT int PTW32_CDECL pthread_barrier_wait | ( | pthread_barrier_t * | barrier | ) |

## § pthread_barrierattr_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_destroy | ( | pthread_barrierattr_t * | attr | ) |

## § pthread_barrierattr_getpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_getpshared | ( | const pthread_barrierattr_t * | attr,
|  | int * | pshared
| ) |  |

## § pthread_barrierattr_init()

PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_init | ( | pthread_barrierattr_t * | attr | ) |

## § pthread_barrierattr_setpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_setpshared | ( | pthread_barrierattr_t * | attr,
|  | int | pshared
| ) |  |

## § pthread_cancel()

PTW32_DLLPORT int PTW32_CDECL pthread_cancel | ( | pthread_t | thread | ) |

## § pthread_cond_broadcast()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_broadcast | ( | pthread_cond_t * | cond | ) |

## § pthread_cond_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_destroy | ( | pthread_cond_t * | cond | ) |

## § pthread_cond_init()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_init | ( | pthread_cond_t * | cond,
|  | const pthread_condattr_t * | attr
| ) |  |

## § pthread_cond_signal()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_signal | ( | pthread_cond_t * | cond | ) |

## § pthread_cond_timedwait()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_timedwait | ( | pthread_cond_t * | cond,
|  | pthread_mutex_t * | mutex,
|  | const struct timespec * | abstime
| ) |  |

## § pthread_cond_wait()

PTW32_DLLPORT int PTW32_CDECL pthread_cond_wait | ( | pthread_cond_t * | cond,
|  | pthread_mutex_t * | mutex
| ) |  |

## § pthread_condattr_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_condattr_destroy | ( | pthread_condattr_t * | attr | ) |

## § pthread_condattr_getpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_condattr_getpshared | ( | const pthread_condattr_t * | attr,
|  | int * | pshared
| ) |  |

## § pthread_condattr_init()

PTW32_DLLPORT int PTW32_CDECL pthread_condattr_init | ( | pthread_condattr_t * | attr | ) |

## § pthread_condattr_setpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_condattr_setpshared | ( | pthread_condattr_t * | attr,
|  | int | pshared
| ) |  |

## § pthread_create()

PTW32_DLLPORT int PTW32_CDECL pthread_create | ( | pthread_t * | tid,
|  | const pthread_attr_t * | attr,
|  | void * | PTW32_CDECL *start)(void *,
|  | void * | arg
| ) |  |

## § pthread_delay_np()

PTW32_DLLPORT int PTW32_CDECL pthread_delay_np | ( | struct timespec * | interval | ) |

## § pthread_detach()

PTW32_DLLPORT int PTW32_CDECL pthread_detach | ( | pthread_t | tid | ) |

## § pthread_equal()

PTW32_DLLPORT int PTW32_CDECL pthread_equal | ( | pthread_t | t1,
|  | pthread_t | t2
| ) |  |

## § pthread_exit()

PTW32_DLLPORT void PTW32_CDECL pthread_exit | ( | void * | value_ptr | ) |

## § pthread_getconcurrency()

PTW32_DLLPORT int PTW32_CDECL pthread_getconcurrency | ( | void |  | ) |

## § pthread_getschedparam()

PTW32_DLLPORT int PTW32_CDECL pthread_getschedparam | ( | pthread_t | thread,
|  | int * | policy,
|  | struct sched_param * | param
| ) |  |

## § pthread_getspecific()

PTW32_DLLPORT void* PTW32_CDECL pthread_getspecific | ( | pthread_key_t | key | ) |

## § pthread_getunique_np()

PTW32_DLLPORT unsigned __int64 PTW32_CDECL pthread_getunique_np | ( | pthread_t | thread | ) |

## § pthread_getw32threadhandle_np()

PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np | ( | pthread_t | thread | ) |

## § pthread_getw32threadid_np()

PTW32_DLLPORT DWORD PTW32_CDECL pthread_getw32threadid_np | ( | pthread_t | thread | ) |

## § pthread_join()

PTW32_DLLPORT int PTW32_CDECL pthread_join | ( | pthread_t | thread,
|  | void ** | value_ptr
| ) |  |

## § pthread_key_create()

PTW32_DLLPORT int PTW32_CDECL pthread_key_create | ( | pthread_key_t * | key,
|  | void(PTW32_CDECL *destructor)(void *) |
| ) |  |

## § pthread_key_delete()

PTW32_DLLPORT int PTW32_CDECL pthread_key_delete | ( | pthread_key_t | key | ) |

## § pthread_kill()

PTW32_DLLPORT int PTW32_CDECL pthread_kill | ( | pthread_t | thread,
|  | int | sig
| ) |  |

## § pthread_mutex_consistent()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_consistent | ( | pthread_mutex_t * | mutex | ) |

## § pthread_mutex_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_destroy | ( | pthread_mutex_t * | mutex | ) |

## § pthread_mutex_init()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_init | ( | pthread_mutex_t * | mutex,
|  | const pthread_mutexattr_t * | attr
| ) |  |

## § pthread_mutex_lock()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_lock | ( | pthread_mutex_t * | mutex | ) |

## § pthread_mutex_timedlock()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_timedlock | ( | pthread_mutex_t * | mutex,
|  | const struct timespec * | abstime
| ) |  |

## § pthread_mutex_trylock()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_trylock | ( | pthread_mutex_t * | mutex | ) |

## § pthread_mutex_unlock()

PTW32_DLLPORT int PTW32_CDECL pthread_mutex_unlock | ( | pthread_mutex_t * | mutex | ) |

## § pthread_mutexattr_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_destroy | ( | pthread_mutexattr_t * | attr | ) |

## § pthread_mutexattr_getkind_np()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getkind_np | ( | pthread_mutexattr_t * | attr,
|  | int * | kind
| ) |  |

## § pthread_mutexattr_getpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getpshared | ( | const pthread_mutexattr_t * | attr,
|  | int * | pshared
| ) |  |

## § pthread_mutexattr_getrobust()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getrobust | ( | const pthread_mutexattr_t * | attr,
|  | int * | robust
| ) |  |

## § pthread_mutexattr_gettype()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype | ( | const pthread_mutexattr_t * | attr,
|  | int * | kind
| ) |  |

## § pthread_mutexattr_init()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_init | ( | pthread_mutexattr_t * | attr | ) |

## § pthread_mutexattr_setkind_np()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setkind_np | ( | pthread_mutexattr_t * | attr,
|  | int | kind
| ) |  |

## § pthread_mutexattr_setpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared | ( | pthread_mutexattr_t * | attr,
|  | int | pshared
| ) |  |

## § pthread_mutexattr_setrobust()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setrobust | ( | pthread_mutexattr_t * | attr,
|  | int | robust
| ) |  |

## § pthread_mutexattr_settype()

PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype | ( | pthread_mutexattr_t * | attr,
|  | int | kind
| ) |  |

## § pthread_num_processors_np()

PTW32_DLLPORT int PTW32_CDECL pthread_num_processors_np | ( | void |  | ) |

## § pthread_once()

PTW32_DLLPORT int PTW32_CDECL pthread_once | ( | pthread_once_t * | once_control,
|  | void(PTW32_CDECL *init_routine)(void) |
| ) |  |

## § pthread_rwlock_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_destroy | ( | pthread_rwlock_t * | lock | ) |

## § pthread_rwlock_init()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_init | ( | pthread_rwlock_t * | lock,
|  | const pthread_rwlockattr_t * | attr
| ) |  |

## § pthread_rwlock_rdlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_rdlock | ( | pthread_rwlock_t * | lock | ) |

## § pthread_rwlock_timedrdlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedrdlock | ( | pthread_rwlock_t * | lock,
|  | const struct timespec * | abstime
| ) |  |

## § pthread_rwlock_timedwrlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedwrlock | ( | pthread_rwlock_t * | lock,
|  | const struct timespec * | abstime
| ) |  |

## § pthread_rwlock_tryrdlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_tryrdlock | ( | pthread_rwlock_t * |  | ) |

## § pthread_rwlock_trywrlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_trywrlock | ( | pthread_rwlock_t * |  | ) |

## § pthread_rwlock_unlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_unlock | ( | pthread_rwlock_t * | lock | ) |

## § pthread_rwlock_wrlock()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_wrlock | ( | pthread_rwlock_t * | lock | ) |

## § pthread_rwlockattr_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_destroy | ( | pthread_rwlockattr_t * | attr | ) |

## § pthread_rwlockattr_getpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_getpshared | ( | const pthread_rwlockattr_t * | attr,
|  | int * | pshared
| ) |  |

## § pthread_rwlockattr_init()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_init | ( | pthread_rwlockattr_t * | attr | ) |

## § pthread_rwlockattr_setpshared()

PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_setpshared | ( | pthread_rwlockattr_t * | attr,
|  | int | pshared
| ) |  |

## § pthread_self()

PTW32_DLLPORT pthread_t PTW32_CDECL pthread_self | ( | void |  | ) |

## § pthread_setcancelstate()

PTW32_DLLPORT int PTW32_CDECL pthread_setcancelstate | ( | int | state,
|  | int * | oldstate
| ) |  |

## § pthread_setcanceltype()

PTW32_DLLPORT int PTW32_CDECL pthread_setcanceltype | ( | int | type,
|  | int * | oldtype
| ) |  |

## § pthread_setconcurrency()

PTW32_DLLPORT int PTW32_CDECL pthread_setconcurrency | ( | int |  | ) |

## § pthread_setschedparam()

PTW32_DLLPORT int PTW32_CDECL pthread_setschedparam | ( | pthread_t | thread,
|  | int | policy,
|  | const struct sched_param * | param
| ) |  |

## § pthread_setspecific()

PTW32_DLLPORT int PTW32_CDECL pthread_setspecific | ( | pthread_key_t | key,
|  | const void * | value
| ) |  |

## § pthread_spin_destroy()

PTW32_DLLPORT int PTW32_CDECL pthread_spin_destroy | ( | pthread_spinlock_t * | lock | ) |

## § pthread_spin_init()

PTW32_DLLPORT int PTW32_CDECL pthread_spin_init | ( | pthread_spinlock_t * | lock,
|  | int | pshared
| ) |  |

## § pthread_spin_lock()

PTW32_DLLPORT int PTW32_CDECL pthread_spin_lock | ( | pthread_spinlock_t * | lock | ) |

## § pthread_spin_trylock()

PTW32_DLLPORT int PTW32_CDECL pthread_spin_trylock | ( | pthread_spinlock_t * | lock | ) |

## § pthread_spin_unlock()

PTW32_DLLPORT int PTW32_CDECL pthread_spin_unlock | ( | pthread_spinlock_t * | lock | ) |

## § pthread_testcancel()

PTW32_DLLPORT void PTW32_CDECL pthread_testcancel | ( | void |  | ) |

## § pthread_timechange_handler_np()

PTW32_DLLPORT void* PTW32_CDECL pthread_timechange_handler_np | ( | void * |  | ) |

## § pthread_win32_process_attach_np()

PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_attach_np | ( | void |  | ) |

## § pthread_win32_process_detach_np()

PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_detach_np | ( | void |  | ) |

## § pthread_win32_test_features_np()

PTW32_DLLPORT int PTW32_CDECL pthread_win32_test_features_np | ( | int |  | ) |

## § pthread_win32_thread_attach_np()

PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_attach_np | ( | void |  | ) |

## § pthread_win32_thread_detach_np()

PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_detach_np | ( | void |  | ) |

## § pthreadCancelableTimedWait()

PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait | ( | HANDLE | waitHandle,
|  | DWORD | timeout
| ) |  |

## § pthreadCancelableWait()

PTW32_DLLPORT int PTW32_CDECL pthreadCancelableWait | ( | HANDLE | waitHandle | ) |

## § ptw32_get_exception_services_code()

PTW32_DLLPORT DWORD PTW32_CDECL ptw32_get_exception_services_code | ( | void |  | ) |

## § ptw32_pop_cleanup()

PTW32_DLLPORT ptw32_cleanup_t* PTW32_CDECL ptw32_pop_cleanup | ( | int | execute | ) |

## § ptw32_push_cleanup()

PTW32_DLLPORT void PTW32_CDECL ptw32_push_cleanup | ( | ptw32_cleanup_t * | cleanup,
|  | ptw32_cleanup_callback_t | routine,
|  | void * | arg
| ) |  |