[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Linrad] Re: Setting priorities in Windows

Alex Artieda wrote:
Dear Colleagues

Windows give to you an easy way to set up the priority level of any kind of
application, its very simple, you can select 6 different levels:

Well, it is a bit more complex than that. Windows is very flexible, and when you know it fully, you appreciate it more than
Linux, which is a bit more amateurish as an operating system.

In Windows there are Process Priority Classes and Thread Priority Levels.

From the MSDN :  (http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx)

Priority Class

Each process belongs to one of the following priority classes:


By default, the priority class of a process is NORMAL_PRIORITY_CLASS. Use the CreateProcess function to specify the priority
class of a child process when you create it. If the calling process is IDLE_PRIORITY_CLASS or BELOW_NORMAL_PRIORITY_CLASS,
the new process will inherit this class. Use the GetPriorityClass function to determine the current priority class of a process and the
SetPriorityClass function to change the priority class of a process.

Use HIGH_PRIORITY_CLASS with care. If a thread runs at the highest priority level for extended periods, other threads in the system
will not get processor time. If several threads are set at high priority at the same time, the threads lose their effectiveness.
The high-priority class should be reserved for threads that must respond to time-critical events. If your application performs one task that
requires the high-priority class while the rest of its tasks are normal priority, use SetPriorityClass to raise the priority class of the application
temporarily; then reduce it after the time-critical task has been completed. Another strategy is to create a high-priority process that has all of
its threads blocked most of the time, awakening threads only when critical tasks are needed. The important point is that a high-priority thread
should execute for a brief time, and only when it has time-critical work to perform.

You should almost never use REALTIME_PRIORITY_CLASS, because this interrupts system threads that manage mouse input, keyboard input,
and background disk flushing. This class can be appropriate for applications that "talk" directly to hardware or that perform brief tasks that should have limited interruptions.

Priority Level

The following are priority levels within each priority class:


All threads are created using THREAD_PRIORITY_NORMAL. This means that the thread priority is the same as the process priority class.
After you create a thread, use the SetThreadPriority function to adjust its priority relative to other threads in the process.

A typical strategy is to use THREAD_PRIORITY_ABOVE_NORMAL or THREAD_PRIORITY_HIGHEST for the process's input thread, to ensure
that the application is responsive to the user. Background threads, particularly those that are processor intensive, can be set to THREAD_PRIORITY_BELOW_NORMAL
or THREAD_PRIORITY_LOWEST, to ensure that they can be preempted when necessary. However, if you have a thread waiting for another thread with
a lower priority to complete some task, be sure to block the execution of the waiting high-priority thread. To do this, use a wait function, critical section,
or the Sleep function, SleepEx, or SwitchToThread function. This is preferable to having the thread execute a loop. Otherwise, the process may become
deadlocked, because the thread with lower priority is never scheduled.

To determine the current priority level of a thread, use the GetThreadPriority function.


73  Alberto  I2PHD

You received this message because you are subscribed to the Google Groups "Linrad" group.
To post to this group, send email to linrad@xxxxxxxxxxxxxxxx
To unsubscribe from this group, send email to linrad+unsubscribe@xxxxxxxxxxxxxxxx
For more options, visit this group at http://groups.google.com/group/linrad?hl=en