mirror of
https://github.com/beefytech/Beef.git
synced 2025-07-06 16:25:59 +02:00
Lazy<T>
, LazyTLS<T>
, thread dtors
This commit is contained in:
parent
cf269db0eb
commit
a27ef9beda
17 changed files with 437 additions and 30 deletions
|
@ -223,6 +223,7 @@ enum BfpThreadCreateFlags
|
|||
};
|
||||
|
||||
typedef void (BFP_CALLTYPE *BfpThreadStartProc)(void* threadParam);
|
||||
typedef void (BFP_CALLTYPE* BfpTLSProc)(void* threadParam);
|
||||
|
||||
enum BfpThreadPriority
|
||||
{
|
||||
|
@ -273,8 +274,9 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Enter(BfpCritSect* critSect);
|
|||
BFP_EXPORT bool BFP_CALLTYPE BfpCritSect_TryEnter(BfpCritSect* critSect, int waitMS);
|
||||
BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect);
|
||||
|
||||
|
||||
struct BfpTLS;
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create();
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc);
|
||||
BFP_EXPORT void BFP_CALLTYPE BfpTLS_Release(BfpTLS* tls);
|
||||
BFP_EXPORT void BFP_CALLTYPE BfpTLS_SetValue(BfpTLS* tls, void* value);
|
||||
BFP_EXPORT void* BFP_CALLTYPE BfpTLS_GetValue(BfpTLS* tls);
|
||||
|
|
|
@ -1528,10 +1528,10 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect)
|
|||
pthread_mutex_unlock(&critSect->mPMutex);
|
||||
}
|
||||
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create()
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc)
|
||||
{
|
||||
pthread_key_t key = 0;
|
||||
pthread_key_create(&key, NULL);
|
||||
pthread_key_create(&key, exitProc);
|
||||
return (BfpTLS*)(intptr)key;
|
||||
}
|
||||
|
||||
|
|
|
@ -2530,24 +2530,24 @@ BFP_EXPORT void BFP_CALLTYPE BfpCritSect_Leave(BfpCritSect* critSect)
|
|||
#define BFPTLS_TO_DWORD(val) ((DWORD)(intptr)(val))
|
||||
|
||||
struct BfpTLS;
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create()
|
||||
BFP_EXPORT BfpTLS* BFP_CALLTYPE BfpTLS_Create(BfpTLSProc exitProc)
|
||||
{
|
||||
return DWORD_TO_BFPTLS(::TlsAlloc());
|
||||
return DWORD_TO_BFPTLS(::FlsAlloc(exitProc));
|
||||
}
|
||||
|
||||
BFP_EXPORT void BFP_CALLTYPE BfpTLS_Release(BfpTLS* tls)
|
||||
{
|
||||
::TlsFree(BFPTLS_TO_DWORD(tls));
|
||||
::FlsFree(BFPTLS_TO_DWORD(tls));
|
||||
}
|
||||
|
||||
BFP_EXPORT void BFP_CALLTYPE BfpTLS_SetValue(BfpTLS* tls, void* value)
|
||||
{
|
||||
::TlsSetValue(BFPTLS_TO_DWORD(tls), value);
|
||||
::FlsSetValue(BFPTLS_TO_DWORD(tls), value);
|
||||
}
|
||||
|
||||
BFP_EXPORT void* BFP_CALLTYPE BfpTLS_GetValue(BfpTLS* tls)
|
||||
{
|
||||
return ::TlsGetValue(BFPTLS_TO_DWORD(tls));
|
||||
return ::FlsGetValue(BFPTLS_TO_DWORD(tls));
|
||||
}
|
||||
|
||||
BFP_EXPORT BfpEvent* BFP_CALLTYPE BfpEvent_Create(BfpEventFlags flags)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue