implement CreateThread with boost::thread
I'm not sure why this wasn't done before. - Removes typedef of pthread_t on Windows, which fixes a native compile issue on mingw.
This commit is contained in:
parent
74d36d44f2
commit
61d8507140
2 changed files with 13 additions and 52 deletions
12
src/util.cpp
12
src/util.cpp
|
@ -1299,3 +1299,15 @@ void RenameThread(const char* name)
|
|||
(void)name;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CreateThread(void(*pfn)(void*), void* parg)
|
||||
{
|
||||
try
|
||||
{
|
||||
boost::thread(pfn, parg); // thread detaches when out of scope
|
||||
} catch(boost::thread_resource_error &e) {
|
||||
printf("Error creating thread: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
53
src/util.h
53
src/util.h
|
@ -539,65 +539,14 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
bool CreateThread(void(*pfn)(void*), void* parg);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Note: It turns out we might have been able to use boost::thread
|
||||
// by using TerminateThread(boost::thread.native_handle(), 0);
|
||||
#ifdef WIN32
|
||||
typedef HANDLE pthread_t;
|
||||
|
||||
inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=false)
|
||||
{
|
||||
DWORD nUnused = 0;
|
||||
HANDLE hthread =
|
||||
CreateThread(
|
||||
NULL, // default security
|
||||
0, // inherit stack size from parent
|
||||
(LPTHREAD_START_ROUTINE)pfn, // function pointer
|
||||
parg, // argument
|
||||
0, // creation option, start immediately
|
||||
&nUnused); // thread identifier
|
||||
if (hthread == NULL)
|
||||
{
|
||||
printf("Error: CreateThread() returned %d\n", GetLastError());
|
||||
return (pthread_t)0;
|
||||
}
|
||||
if (!fWantHandle)
|
||||
{
|
||||
CloseHandle(hthread);
|
||||
return (pthread_t)-1;
|
||||
}
|
||||
return hthread;
|
||||
}
|
||||
|
||||
inline void SetThreadPriority(int nPriority)
|
||||
{
|
||||
SetThreadPriority(GetCurrentThread(), nPriority);
|
||||
}
|
||||
#else
|
||||
inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=false)
|
||||
{
|
||||
pthread_t hthread = 0;
|
||||
int ret = pthread_create(&hthread, NULL, (void*(*)(void*))pfn, parg);
|
||||
if (ret != 0)
|
||||
{
|
||||
printf("Error: pthread_create() returned %d\n", ret);
|
||||
return (pthread_t)0;
|
||||
}
|
||||
if (!fWantHandle)
|
||||
{
|
||||
pthread_detach(hthread);
|
||||
return (pthread_t)-1;
|
||||
}
|
||||
return hthread;
|
||||
}
|
||||
|
||||
#define THREAD_PRIORITY_LOWEST PRIO_MAX
|
||||
#define THREAD_PRIORITY_BELOW_NORMAL 2
|
||||
|
|
Loading…
Reference in a new issue