diff options
| author | fusion32 <marcopuzziello@gmail.com> | 2025-06-17 03:13:05 -0300 |
|---|---|---|
| committer | fusion32 <marcopuzziello@gmail.com> | 2025-06-17 03:13:05 -0300 |
| commit | 56bdec57609cd00d7827a3008a9c6b06707097ca (patch) | |
| tree | 08e42a536bf807842de299047195c9ecf5d526ae /src/thread.cc | |
| parent | 0612480d9beb19b9e90b3a4f1198b3da1fd21f6a (diff) | |
| download | game-56bdec57609cd00d7827a3008a9c6b06707097ca.tar.gz game-56bdec57609cd00d7827a3008a9c6b06707097ca.zip | |
all `crplayer.cc` functions outside `TPlayer`
Diffstat (limited to 'src/thread.cc')
| -rw-r--r-- | src/thread.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/thread.cc b/src/thread.cc index 89dfc92..95ce1a6 100644 --- a/src/thread.cc +++ b/src/thread.cc @@ -46,6 +46,54 @@ ThreadHandle StartThread(ThreadFunction *Function, void *Argument, bool Detach){ return (ThreadHandle)Handle; } +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, size_t StackSize, bool Detach){ + TThreadStarter *Starter = new TThreadStarter; + Starter->Function = Function; + Starter->Argument = Argument; + Starter->Detach = Detach; + + pthread_t Handle; + pthread_attr_t Attr; + pthread_attr_init(&Attr); + pthread_attr_setstacksize(&Attr, StackSize); + int err = pthread_create(&Handle, &Attr, ThreadStarter, Starter); + pthread_attr_destroy(&Attr); + if(err != 0){ + error("StartThread: Kann Thread nicht anlegen; Fehlercode %d.\n", err); + return INVALID_THREAD_HANDLE; + } + + if(Detach){ + pthread_detach(Handle); + } + + return (ThreadHandle)Handle; +} + +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, void *Stack, size_t StackSize, bool Detach){ + TThreadStarter *Starter = new TThreadStarter; + Starter->Function = Function; + Starter->Argument = Argument; + Starter->Detach = Detach; + + pthread_t Handle; + pthread_attr_t Attr; + pthread_attr_init(&Attr); + pthread_attr_setstack(&Attr, Stack, StackSize); + int err = pthread_create(&Handle, &Attr, ThreadStarter, Starter); + pthread_attr_destroy(&Attr); + if(err != 0){ + error("StartThread: Kann Thread nicht anlegen; Fehlercode %d.\n", err); + return INVALID_THREAD_HANDLE; + } + + if(Detach){ + pthread_detach(Handle); + } + + return (ThreadHandle)Handle; +} + int JoinThread(ThreadHandle Handle){ int Result = 0; int *ResultPointer; |
