Skip to content

Commit

Permalink
implement CreateThread with boost::thread
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
laanwj committed Aug 29, 2012
1 parent 74d36d4 commit 61d8507
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 52 deletions.
12 changes: 12 additions & 0 deletions src/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 1 addition & 52 deletions src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -539,65 +539,14 @@ template <typename T> class CMedianFilter
}
};

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
Expand Down

0 comments on commit 61d8507

Please sign in to comment.