mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add Win32 support to llvm::llvm_execute_on_thread(). Thanks to Aaron Ballman!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140011 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0a3eb60952
commit
92ec8e1427
@ -102,11 +102,42 @@ void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData,
|
||||
error:
|
||||
::pthread_attr_destroy(&Attr);
|
||||
}
|
||||
#elif defined(LLVM_MULTITHREADED) && defined(LLVM_ON_WIN32)
|
||||
#include "Windows/Windows.h"
|
||||
#include <process.h>
|
||||
|
||||
struct ThreadInfo {
|
||||
void (*func)(void*);
|
||||
void *param;
|
||||
};
|
||||
|
||||
static unsigned __stdcall ThreadCallback(void *param) {
|
||||
struct ThreadInfo *info = reinterpret_cast<struct ThreadInfo *>(param);
|
||||
info->func(info->param);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData,
|
||||
unsigned RequestedStackSize) {
|
||||
struct ThreadInfo param = { Fn, UserData };
|
||||
|
||||
HANDLE hThread = (HANDLE)::_beginthreadex(NULL,
|
||||
RequestedStackSize, ThreadCallback,
|
||||
¶m, 0, NULL);
|
||||
|
||||
if (hThread) {
|
||||
// We actually don't care whether the wait succeeds or fails, in
|
||||
// the same way we don't care whether the pthread_join call succeeds
|
||||
// or fails. There's not much we could do if this were to fail. But
|
||||
// on success, this call will wait until the thread finishes executing
|
||||
// before returning.
|
||||
(void)::WaitForSingleObject(hThread, INFINITE);
|
||||
::CloseHandle(hThread);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
// No non-pthread implementation, currently.
|
||||
|
||||
// Support for non-Win32, non-pthread implementation.
|
||||
void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData,
|
||||
unsigned RequestedStackSize) {
|
||||
(void) RequestedStackSize;
|
||||
|
Loading…
Reference in New Issue
Block a user