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?
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.
It is possible using SetThreadPriority but it's not recommended.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With