History

w32threads: Use newer thread synchronization functions when targeting Vista

When explicitly targeting Vista or newer (which only happens if the caller explicitly sets _WIN32_WINNT to a high enough value via the extra cflags option - otherwise configure script sets -D_WIN32_WINNT=0x0502), we already unconditionally link to the ConditionVariable functions, since 4622f11f9. Similarly use the newer -Ex versions of CreateEvent, CreateSemaphore, InitializeCriticalSection and WaitForSingleObject, that all appeared in Vista. When building Windows Store applications, the older versions of these functions aren't available, only the -Ex functions. When doing such a build, the user can set -D_WIN32_WINNT=0x0600 to forcibly use the newer functions instead.

Martin Storsjö committed 12 years ago

Commit 428b0571 parent 8bf3bf61 file · +12 −0Browse files

Unified · Split

compat/w32pthreads.h+12−0
@@ -72,6 +72,18 @@ static BOOL (WINAPI *cond_wait)(pthread_cond_t *cond, pthread_mutex_t *mutex, · 71 unmodified lines
7272 #define cond_broadcast WakeAllConditionVariable
7373 #define cond_signal WakeConditionVariable
7474 #define cond_wait SleepConditionVariableCS
75+
76+#define CreateEvent(a, reset, init, name) \
77+ CreateEventEx(a, name, \
78+ (reset ? CREATE_EVENT_MANUAL_RESET : 0) | \
79+ (init ? CREATE_EVENT_INITIAL_SET : 0), \
80+ EVENT_ALL_ACCESS)
81+// CreateSemaphoreExA seems to be desktop-only, but as long as we don't
82+// use named semaphores, it doesn't matter if we use the W version.
83+#define CreateSemaphore(a, b, c, d) \
84+ CreateSemaphoreExW(a, b, c, d, 0, SEMAPHORE_ALL_ACCESS)
85+#define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0)
86+#define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE)
7587 #endif
7688
7789 static unsigned __stdcall attribute_align_arg win32thread_worker(void *arg)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t