Zycore 1.5.1.0
Loading...
Searching...
No Matches
Thread.h
Go to the documentation of this file.
1/***************************************************************************************************
2
3 Zyan Core Library (Zycore-C)
4
5 Original Author : Florian Bernd
6
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24
25***************************************************************************************************/
26
32#ifndef ZYCORE_API_THREAD_H
33#define ZYCORE_API_THREAD_H
34
35#include <Zycore/Defines.h>
36#include <Zycore/Status.h>
37
38#ifndef ZYAN_NO_LIBC
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44/* ============================================================================================== */
45/* Enums and types */
46/* ============================================================================================== */
47
48#if defined(ZYAN_POSIX)
49
50#include <pthread.h>
51
52/* ---------------------------------------------------------------------------------------------- */
53/* General */
54/* ---------------------------------------------------------------------------------------------- */
55
59typedef pthread_t ZyanThread;
60
64typedef ZyanU64 ZyanThreadId;
65
66/* ---------------------------------------------------------------------------------------------- */
67/* Thread Local Storage (TLS) */
68/* ---------------------------------------------------------------------------------------------- */
69
73typedef pthread_key_t ZyanThreadTlsIndex;
74
78typedef void(*ZyanThreadTlsCallback)(void* data);
79
87#define ZYAN_THREAD_DECLARE_TLS_CALLBACK(name, param_type, param_name) \
88 void name(param_type* param_name)
89
90/* ---------------------------------------------------------------------------------------------- */
91
92#elif defined(ZYAN_WINDOWS)
93
94#include <windows.h>
95
96/* ---------------------------------------------------------------------------------------------- */
97/* General */
98/* ---------------------------------------------------------------------------------------------- */
99
103typedef HANDLE ZyanThread;
104
108typedef DWORD ZyanThreadId;
109
110/* ---------------------------------------------------------------------------------------------- */
111/* Thread Local Storage (TLS) */
112/* ---------------------------------------------------------------------------------------------- */
113
117typedef DWORD ZyanThreadTlsIndex;
118
122typedef PFLS_CALLBACK_FUNCTION ZyanThreadTlsCallback;
123
131#define ZYAN_THREAD_DECLARE_TLS_CALLBACK(name, param_type, param_name) \
132 VOID NTAPI name(param_type* param_name)
133
134/* ---------------------------------------------------------------------------------------------- */
135
136#else
137# error "Unsupported platform detected"
138#endif
139
140/* ============================================================================================== */
141/* Exported functions */
142/* ============================================================================================== */
143
144/* ---------------------------------------------------------------------------------------------- */
145/* General */
146/* ---------------------------------------------------------------------------------------------- */
147
156
165
166/* ---------------------------------------------------------------------------------------------- */
167/* Thread Local Storage (TLS) */
168/* ---------------------------------------------------------------------------------------------- */
169
199 ZyanThreadTlsCallback destructor);
200
209
220ZYCORE_EXPORT ZyanStatus ZyanThreadTlsGetValue(ZyanThreadTlsIndex index, void** data);
221
231ZYCORE_EXPORT ZyanStatus ZyanThreadTlsSetValue(ZyanThreadTlsIndex index, void* data);
232
233/* ---------------------------------------------------------------------------------------------- */
234
235/* ============================================================================================== */
236
237#ifdef __cplusplus
238}
239#endif
240
241#endif /* ZYAN_NO_LIBC */
242
243#endif /* ZYCORE_API_THREAD_H */
#define ZYCORE_EXPORT
Definition Defines.h:235
ZyanU32 ZyanStatus
Definition Status.h:48
ZYCORE_EXPORT ZyanStatus ZyanThreadTlsGetValue(ZyanThreadTlsIndex index, void **data)
ZYCORE_EXPORT ZyanStatus ZyanThreadTlsSetValue(ZyanThreadTlsIndex index, void *data)
ZYCORE_EXPORT ZyanStatus ZyanThreadTlsFree(ZyanThreadTlsIndex index)
ZYCORE_EXPORT ZyanStatus ZyanThreadTlsAlloc(ZyanThreadTlsIndex *index, ZyanThreadTlsCallback destructor)
ZYCORE_EXPORT ZyanStatus ZyanThreadGetCurrentThread(ZyanThread *thread)
ZYCORE_EXPORT ZyanStatus ZyanThreadGetCurrentThreadId(ZyanThreadId *thread_id)