aboutsummaryrefslogtreecommitdiffstats
path: root/src/gos
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2013-06-02 18:57:22 +1000
committerinmarket <andrewh@inmarket.com.au>2013-06-02 18:57:22 +1000
commit1c258a82738e145953fc9cf40c68dcce6db87d92 (patch)
treec151e882619714d696276ce29ef3388dce6e1866 /src/gos
parentc2a4f9a5d616f5b18a965652d7492aacd377e5e2 (diff)
downloaduGFX-1c258a82738e145953fc9cf40c68dcce6db87d92.tar.gz
uGFX-1c258a82738e145953fc9cf40c68dcce6db87d92.tar.bz2
uGFX-1c258a82738e145953fc9cf40c68dcce6db87d92.zip
GOS updates
Diffstat (limited to 'src/gos')
-rw-r--r--src/gos/chibios.c7
-rw-r--r--src/gos/win32.c15
2 files changed, 16 insertions, 6 deletions
diff --git a/src/gos/chibios.c b/src/gos/chibios.c
index 7e369824..40e176ce 100644
--- a/src/gos/chibios.c
+++ b/src/gos/chibios.c
@@ -86,13 +86,14 @@ void gfxSemSignalI(gfxSem *psem) {
chSemSignalI(&psem->sem);
}
-bool_t gfxCreateThread(void *stackarea, size_t stacksz, threadpriority_t prio, gfxThreadFunction fn, void *param) {
+gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param) {
if (!stackarea) {
if (!stacksz) stacksz = 256;
- return chThdCreateFromHeap(0, stacksz, prio, fn, param) != 0;
+ return chThdCreateFromHeap(0, stacksz, prio, fn, param);
}
- return stacksz && chThdCreateStatic(stackarea, stacksz, prio, fn, param) != NULL;
+ if (!stacksz) return NULL;
+ return chThdCreateStatic(stackarea, stacksz, prio, fn, param);
}
#endif /* GFX_USE_OS_CHIBIOS */
diff --git a/src/gos/win32.c b/src/gos/win32.c
index bda57f6f..a1c5abcd 100644
--- a/src/gos/win32.c
+++ b/src/gos/win32.c
@@ -96,15 +96,24 @@ semcount_t gfxSemCounter(gfxSem *pSem) {
return BasicInfo.CurrentCount;
}
-bool_t gfxCreateThread(void *stackarea, size_t stacksz, threadpriority_t prio, gfxThreadFunction fn, void *param) {
- (void) stackarea;
+gfxThreadHandle gfxThreadCreate(void *stackarea, size_t stacksz, threadpriority_t prio, DECLARE_THREAD_FUNCTION((*fn),p), void *param) {
+ (void) stackarea;
HANDLE thd;
if (!(thd = CreateThread(NULL, stacksz, fn, param, CREATE_SUSPENDED, NULL)))
return FALSE;
SetThreadPriority(thd, prio);
ResumeThread(thd);
- return TRUE;
+ return thd;
+}
+
+threadreturn_t gfxThreadWait(gfxThreadHandle thread) {
+ DWORD ret;
+
+ WaitForSingleObject(thread, INFINITE);
+ GetExitCodeThread(thread, &ret);
+ CloseHandle(thread);
+ return ret;
}
#endif /* GFX_USE_OS_WIN32 */