Приоритеты потоков в Qt
Оглавление
- Процессы и потоки в Qt
- QProcess – процессы в Qt
- QThread – потоки в Qt
- Приоритеты потоков в Qt
- Обмен сообщениями между потоками
- Сигнально-слотовые соединения
- Связь между потоками с помощью высылки событий
- Синхронизация
- QMutex — мьютексы в Qt
- QWaitCondition — условные ожидания в Qt
- Взаимные блокировки
- QSemaphore — семафоры в Qt
У каждого потока есть приоритет, указывающий процессору, как должно протекать выполнение потока по отношению к другим потокам. Приоритеты разделяются по группам:
- в первую входят четыре наиболее часто применяемых приоритета. Их значимость распределяется по возрастанию — IdlePriority, LowestPriority, LowPriority, NormaiPriority. Они подходят для решения задач, которым процессор требуется только время от времени, например, для фоновой печати или для каких-нибудь несрочных действий;
- во вторую группу входят два приоритета — HighPriority, HighestPriority. Пользуйтесь такими приоритетами с большой осторожностью. Обычно эти потоки большую часть времени ожидают какие-либо события;
- в третью входят два приоритета — TimeCriticalPriority, InheritPriority. Потоки с этими приоритетами нужно создавать в случаях крайней необходимости. Эти приоритеты нужны для программ, напрямую общающихся с аппаратурой или выполняющих операции, которые ни в коем случае не должны прерваться.
Для того чтобы запустить поток с нужным приоритетом, необходимо передать одно из приведенных выше значений в метод start(). Например:
MyThread thread;
thread.start(QThread::IdlePriority);
А для того чтобы узнать, с каким приоритетом был запущен поток, нужно вызвать метод priority(). Приоритет можно предварительно установить при помощи метода setPriority().
В Linux ядро системы запустит поток даже в том случае, если в нем уже запущены хоть 100 потоков с максимальным приоритетом. Ядро системы не потеряет работоспособность, и вы будете в состоянии запускать и другие потоки. Но в Windows все обстоит иначе, если вы запустите поток с самым высоким приоритетом, то поток с самым низким приоритетом будет просто проигнорирован и это может быть плачевно для тех, кто использует потоки с самым низким приоритетом, для проведения каких-либо вспомогательных операций, например, загрузки данных с диска.
Читать далее: Обмен сообщениями между потоками