/* Return the current thread's priority. */ int __objc_thread_get_priority(void) { int sys_priority; if (thr_getprio(thr_self(), &sys_priority) == 0) { if (sys_priority >= 250) return OBJC_THREAD_INTERACTIVE_PRIORITY; else if (sys_priority >= 150) return OBJC_THREAD_BACKGROUND_PRIORITY; return OBJC_THREAD_LOW_PRIORITY; } /* Couldn't get priority. */ return -1; }
/* wait for all benchmark threads to terminate */ void WaitForThreads(ThreadID tids[], unsigned tidCnt) { #ifdef __OS2__ while (tidCnt--) DosWaitThread(&tids[tidCnt], DCWW_WAIT); #elif defined(WIN32) WaitForMultipleObjects(tidCnt, tids, TRUE, INFINITE); #elif defined(__sun) int prio; thr_getprio(thr_self(), &prio); thr_setprio(thr_self(), max(0, prio-1)); while (tidCnt--) thr_join(0, NULL, NULL); #elif defined(_POSIX_THREADS) || defined(_POSIX_REENTRANT_FUNCTIONS) while (tidCnt--) pthread_join(tids[tidCnt], NULL); #endif }