31 #ifndef CPL_MULTIPROC_H_INCLUDED_ 32 #define CPL_MULTIPROC_H_INCLUDED_ 43 #if defined(WIN32) && !defined(CPL_MULTIPROC_STUB) 44 # define CPL_MULTIPROC_WIN32 47 # undef CPL_MULTIPROC_PTHREAD 50 #if !defined(CPL_MULTIPROC_WIN32) && !defined(CPL_MULTIPROC_PTHREAD) \ 51 && !defined(CPL_MULTIPROC_STUB) && !defined(CPL_MULTIPROC_NONE) 52 # define CPL_MULTIPROC_STUB 57 typedef void (*CPLThreadFunc)(
void *);
59 void CPL_DLL *CPLLockFile(
const char *pszPath,
double dfWaitInSeconds );
60 void CPL_DLL CPLUnlockFile(
void *hLock );
63 typedef struct _CPLMutex CPLMutex;
64 typedef struct _CPLCond CPLCond;
65 typedef struct _CPLJoinableThread CPLJoinableThread;
69 #define CPLJoinableThread void 73 #define CPL_MUTEX_RECURSIVE 0 74 #define CPL_MUTEX_ADAPTIVE 1 75 #define CPL_MUTEX_REGULAR 2 77 CPLMutex CPL_DLL *CPLCreateMutex(
void );
78 CPLMutex CPL_DLL *CPLCreateMutexEx(
int nOptions );
79 int CPL_DLL CPLCreateOrAcquireMutex( CPLMutex **,
double dfWaitInSeconds );
80 int CPL_DLL CPLCreateOrAcquireMutexEx( CPLMutex **,
double dfWaitInSeconds,
int nOptions );
81 int CPL_DLL CPLAcquireMutex( CPLMutex *hMutex,
double dfWaitInSeconds );
82 void CPL_DLL CPLReleaseMutex( CPLMutex *hMutex );
83 void CPL_DLL CPLDestroyMutex( CPLMutex *hMutex );
84 void CPL_DLL CPLCleanupMasterMutex(
void );
86 CPLCond CPL_DLL *CPLCreateCond(
void );
87 void CPL_DLL CPLCondWait( CPLCond *hCond, CPLMutex* hMutex );
88 void CPL_DLL CPLCondSignal( CPLCond *hCond );
89 void CPL_DLL CPLCondBroadcast( CPLCond *hCond );
90 void CPL_DLL CPLDestroyCond( CPLCond *hCond );
93 GIntBig CPL_DLL CPLGetPID(
void );
94 int CPL_DLL CPLGetCurrentProcessID(
void );
95 int CPL_DLL CPLCreateThread( CPLThreadFunc pfnMain,
void *pArg );
96 CPLJoinableThread CPL_DLL* CPLCreateJoinableThread( CPLThreadFunc pfnMain,
void *pArg );
97 void CPL_DLL CPLJoinThread(CPLJoinableThread* hJoinableThread);
98 void CPL_DLL CPLSleep(
double dfWaitInSeconds );
100 const char CPL_DLL *CPLGetThreadingModel(
void );
102 int CPL_DLL CPLGetNumCPUs(
void );
104 typedef struct _CPLLock CPLLock;
111 LOCK_RECURSIVE_MUTEX,
116 CPLLock CPL_DLL *CPLCreateLock( CPLLockType eType );
117 int CPL_DLL CPLCreateOrAcquireLock( CPLLock**, CPLLockType eType );
118 int CPL_DLL CPLAcquireLock( CPLLock* );
119 void CPL_DLL CPLReleaseLock( CPLLock* );
120 void CPL_DLL CPLDestroyLock( CPLLock* );
121 void CPL_DLL CPLLockSetDebugPerf( CPLLock*,
int bEnableIn );
125 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS) 128 #define CPLMutexHolderD(x) CPLMutexHolder oHolder(x,1000.0,__FILE__,__LINE__); 132 #define CPLMutexHolderExD(x, nOptions) CPLMutexHolder oHolder(x,1000.0,__FILE__,__LINE__,nOptions); 136 #define CPLMutexHolderOptionalLockD(x) CPLMutexHolder oHolder(x,1000.0,__FILE__,__LINE__); 142 CPLMutex *hMutex =
nullptr;
144 const char *pszFile =
nullptr;
152 explicit CPLMutexHolder( CPLMutex **phMutex,
double dfWaitInSeconds = 1000.0,
153 const char *pszFile = __FILE__,
154 int nLine = __LINE__,
155 int nOptions = CPL_MUTEX_RECURSIVE);
159 explicit CPLMutexHolder( CPLMutex* hMutex,
double dfWaitInSeconds = 1000.0,
160 const char *pszFile = __FILE__,
161 int nLine = __LINE__ );
167 #define CPLLockHolderD(x, eType) CPLLockHolder oHolder(x,eType,__FILE__,__LINE__); 171 #define CPLLockHolderOptionalLockD(x) CPLLockHolder oHolder(x,__FILE__,__LINE__); 177 CPLLock *hLock =
nullptr;
178 const char *pszFile =
nullptr;
187 const char *pszFile = __FILE__,
188 int nLine = __LINE__);
193 const char *pszFile = __FILE__,
194 int nLine = __LINE__ );
205 #define CTLS_RLBUFFERINFO 1 206 #define CTLS_WIN32_COND 2 207 #define CTLS_CSVTABLEPTR 3 208 #define CTLS_CSVDEFAULTFILENAME 4 209 #define CTLS_ERRORCONTEXT 5 211 #define CTLS_PATHBUF 7 212 #define CTLS_ABSTRACTARCHIVE_SPLIT 8 213 #define CTLS_UNUSED4 9 214 #define CTLS_CPLSPRINTF 10 215 #define CTLS_RESPONSIBLEPID 11 216 #define CTLS_VERSIONINFO 12 217 #define CTLS_VERSIONINFO_LICENCE 13 218 #define CTLS_CONFIGOPTIONS 14 219 #define CTLS_FINDFILE 15 220 #define CTLS_VSIERRORCONTEXT 16 221 #define CTLS_ERRORHANDLERACTIVEDATA 17 226 void CPL_DLL * CPLGetTLS(
int nIndex );
227 void CPL_DLL * CPLGetTLSEx(
int nIndex,
int* pbMemoryErrorOccurred );
228 void CPL_DLL CPLSetTLS(
int nIndex,
void *pData,
int bFreeOnExit );
232 typedef void (*CPLTLSFreeFunc)(
void* pData );
233 void CPL_DLL CPLSetTLSWithFreeFunc(
int nIndex,
void *pData, CPLTLSFreeFunc pfnFree );
234 void CPL_DLL CPLSetTLSWithFreeFuncEx(
int nIndex,
void *pData, CPLTLSFreeFunc pfnFree,
int* pbMemoryErrorOccurred );
236 void CPL_DLL CPLCleanupTLS(
void );
Object to hold a mutex.
Definition: cpl_multiproc.h:139
Core portability definitions for CPL.
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:337
Object to hold a lock.
Definition: cpl_multiproc.h:174
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:339
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition: cpl_port.h:248
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition: cpl_port.h:989