DSL
Threading.h
1 //@AUTOHEADER@BEGIN@
2 /***********************************************************************\
3 | Drift Standard Libraries v1.01 |
4 | Copyright 2010-2023 Drift Solutions / Indy Sams |
5 | Docs and more information available at https://www.driftsolutions.dev |
6 | This file released under the 3-clause BSD license, |
7 | see included DSL.LICENSE.TXT file for details. |
8 \***********************************************************************/
9 //@AUTOHEADER@END@
10 
11 #ifndef _DSL_THREADING_H_
12 #define _DSL_THREADING_H_
13 
14 #if defined(__cplusplus) && ((defined(_MSC_VER) && _MSC_VER >= 1800 && __cplusplus >= 199711L) || __cplusplus >= 201103L)
15 #define DSL_THREADING_USE_C11
16 #endif
17 
26 #if defined(WIN32)
27 #define THREADIDTYPE DWORD
28 #else
29 #define THREADIDTYPE pthread_t
30 #endif
31 
33 #ifdef _WIN32
34  HANDLE hThread;
35 #else
36  pthread_t hThread;
37 #endif
38 
39  int32 id;
40  void * parm;
41 
42  char desc[256];
43 
44 #ifndef DOXYGEN_SKIP
45  void (*RemoveMe)(DSL_THREAD_INFO * tt);
46 #endif
47 };
48 
52 DSL_API DSL_THREAD_INFO * DSL_CC DSL_StartThread(ThreadProto Thread, void * Parm, const char * Desc = NULL, int32 id = -1);
56 DSL_API bool DSL_CC DSL_StartThreadNoRecord(ThreadProto Thread, void * Parm, const char * Desc = NULL);
57 
58 DSL_API uint32 DSL_CC DSL_NumThreads();
59 DSL_API uint32 DSL_CC DSL_NumThreadsWithID(int id);
60 DSL_API void DSL_CC DSL_PrintRunningThreads();
61 DSL_API void DSL_CC DSL_PrintRunningThreadsWithID(int id);
62 DSL_API bool DSL_CC DSL_KillThread(DSL_THREAD_INFO * tt);
63 
64 #define DSL_DEFINE_THREAD(x) THREADTYPE x(void * lpData)
65 
66 #if defined(WIN32)
67 //new-style
68 #define DSL_THREAD_START DSL_THREAD_INFO * tt = (DSL_THREAD_INFO *)lpData;
69 #define DSL_THREAD_END tt->RemoveMe(tt); return 0;
70 
71 #if !defined(DSL_NO_OLD_THREAD_API) && !defined(DOXYGEN_SKIP)
72 //old-style
73 #define DSL_THREADEND return 0;
74 #endif
75 
76 DSL_API void DSL_CC DSL_SetThreadName(DWORD dwThreadID, LPCSTR szThreadName);
77 #else
78 //new-style
79 #define DSL_THREAD_START DSL_THREAD_INFO * tt = (DSL_THREAD_INFO *)lpData;
80 #define DSL_THREAD_END tt->RemoveMe(tt); return NULL;
81 
82 #if !defined(DSL_NO_OLD_THREAD_API) && !defined(DOXYGEN_SKIP)
83 //old-style
84 #define DSL_THREADEND return NULL;
85 #endif
86 
87 #define GetCurrentThreadId pthread_self
88 #endif
89 
90 #if !defined(NO_CPLUSPLUS) || defined(DOXYGEN_SKIP)
91 DSL_API void DSL_CC safe_sleep(int sleepfor, bool inmilli = false);
92 #else
93 DSL_API void DSL_CC safe_sleep(int sleepfor, bool inmilli);
94 #endif
95 #define safe_sleep_ms(sleepfor) safe_sleep(sleepfor, true)
96 #define safe_sleep_s(sleepfor) safe_sleep(sleepfor, false)
97 
100 #endif // _DSL_MUTEX_H_
DSL_API uint32 DSL_CC DSL_NumThreads()
Number of active threads (does not count threads started with DSL_StartThreadNoRecord)
Definition: Threading.cpp:191
DSL_API bool DSL_CC DSL_StartThreadNoRecord(ThreadProto Thread, void *Parm, const char *Desc=NULL)
Definition: Threading.cpp:133
DSL_API DSL_THREAD_INFO *DSL_CC DSL_StartThread(ThreadProto Thread, void *Parm, const char *Desc=NULL, int32 id=-1)
Definition: Threading.cpp:97
DSL_API uint32 DSL_CC DSL_NumThreadsWithID(int id)
Number of active threads with matching id #.
Definition: Threading.cpp:196
void * parm
User-specified parameter.
Definition: Threading.h:40
int32 id
User-specified ID, if DSL_StartThread() is used with no ID, it defaults to -1.
Definition: Threading.h:39