Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting a single thread to real-time priority under windows

Tags:

winapi

is it possible to set the priority of a single thread to real-time priority although the process does not run under real-time priority?

like image 999
Tobias Langner Avatar asked Dec 22 '25 23:12

Tobias Langner


2 Answers

The windows scheduling priorities are describing the situation clearly. There is no thread priority called "real-time priority". The utmost priority a thread can obtain is THREAD_PRIORITY_TIME_CRITICAL. But this does not completely describe the threads base priority. This is also determined by the processes priority class. For almost all process priority classes the setting of THREAD_PRIORITY_TIME_CRITICAL will cause the thread to run in base priority of 15. One exception is the REALTIME_PRIORITY_CLASS. A thread set to THREAD_PRIORITY_TIME_CRITICAL within a process which is set to REALTIME_PRIORITY_CLASS runs at a base priority of 31, which is the highest priority to obtain.

The combination of NORMAL_PRIORITY_CLASS and THREAD_PRIORITY_TIME_CRITICAL puts a thread already well above most other threads (also OS) but I wouldn't call this real-time.

For my point of view (and as described in the "scheduling priorities list") real-time only starts at base priorities above 15. Therefore a thread can only obtain real-time priorties, when its process has REALTIME_PRIORITY_CLASS.

This means the correct answer to your question is NO. A thread cannot obtain real-priority when its process has no real-time priority.

like image 94
Arno Avatar answered Dec 27 '25 03:12

Arno


It is possible using SetThreadPriority but it's not recommended.

like image 32
Deanna Avatar answered Dec 27 '25 03:12

Deanna



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!