|
|
|
@ -47,6 +47,9 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) {
|
|
|
|
|
case ThreadPriority::VeryHigh:
|
|
|
|
|
windows_priority = THREAD_PRIORITY_HIGHEST;
|
|
|
|
|
break;
|
|
|
|
|
case ThreadPriority::Critical:
|
|
|
|
|
windows_priority = THREAD_PRIORITY_TIME_CRITICAL;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
windows_priority = THREAD_PRIORITY_NORMAL;
|
|
|
|
|
break;
|
|
|
|
@ -59,9 +62,11 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) {
|
|
|
|
|
void SetCurrentThreadPriority(ThreadPriority new_priority) {
|
|
|
|
|
pthread_t this_thread = pthread_self();
|
|
|
|
|
|
|
|
|
|
s32 max_prio = sched_get_priority_max(SCHED_OTHER);
|
|
|
|
|
s32 min_prio = sched_get_priority_min(SCHED_OTHER);
|
|
|
|
|
u32 level = static_cast<u32>(new_priority) + 1;
|
|
|
|
|
const auto scheduling_type =
|
|
|
|
|
new_priority != ThreadPriority::Critical ? SCHED_OTHER : SCHED_FIFO;
|
|
|
|
|
s32 max_prio = sched_get_priority_max(scheduling_type);
|
|
|
|
|
s32 min_prio = sched_get_priority_min(scheduling_type);
|
|
|
|
|
u32 level = std::max(static_cast<u32>(new_priority) + 1, 4U);
|
|
|
|
|
|
|
|
|
|
struct sched_param params;
|
|
|
|
|
if (max_prio > min_prio) {
|
|
|
|
@ -70,7 +75,7 @@ void SetCurrentThreadPriority(ThreadPriority new_priority) {
|
|
|
|
|
params.sched_priority = min_prio - ((min_prio - max_prio) * level) / 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pthread_setschedparam(this_thread, SCHED_OTHER, ¶ms);
|
|
|
|
|
pthread_setschedparam(this_thread, scheduling_type, ¶ms);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|