Название: priority основного потока (GUI) Отправлено: kkk777kkk от Февраль 23, 2010, 13:37 Задумал выставлять программе высокий приоритет и было бы удобно делать это и для основного потока и при создании остальных приоритет будет сохраняться. Почему-то не нашел как делать это красиво для основного потока (есть вторичных все просто), но нашел хитрый метод вот по ссылке http://lists.trolltech.com/qt-interest/2006-05/thread00831-0.html
Но почему же этого функционала нету в стандартной поставке? Может это как-то не красиво с точки зрения стиля или чем-то чревато? И вообще на сколько вам нравится предложенное там решение? Название: Re: priority основного потока (GUI) Отправлено: ритт от Февраль 23, 2010, 14:18 вариант, предложенный AndreaG, вполне работоспособен.
но также следует иметь в виду, что на различных платформах существуют определённые ограничения на установку приоритетов потокам. Название: Re: priority основного потока (GUI) Отправлено: kkk777kkk от Февраль 23, 2010, 14:40 спасибо, буду иметь в виду, если соберемся на линух идти
Название: Re: priority основного потока (GUI) Отправлено: kkk777kkk от Февраль 23, 2010, 15:58 я вот посмотрел еще раз и в том топике пользователь жаловался, что нашел винапишное решение, а ему надо и на макось и на юникс, а в ассистанте написано "The effect of the priority parameter is dependent on the operating system's scheduling policy. In particular, the priority will be ignored on systems that do not support thread priorities (such as on Linux, see http://linux.die.net/man/2/sched_setscheduler for more details).", то как же ему это помогло...
Название: Re: priority основного потока (GUI) Отправлено: SABROG от Февраль 23, 2010, 16:28 Еще пара вариантов.
Код
Код
Для Windows стоит разделять понятия "класс приоритета приложения" и "приоритет потока". Все приложения изначально получают класс приоритета NORMAL_PRIORITY_CLASS и приоритет потока THREAD_PRIORITY_NORMAL. Предположим, что мы вызываем метод QThread::setPriority(QThread::TimeCriticalPriority), чтобы выделить самый высокий приоритет. К нашему удивлению в том же TaskManager'e приоритет будет стоять "Средний". Но в Windows количество возможных приоритетов аж 31 штука. Самый высокий достигается комбинацией установки класса REALTIME_PRIORITY_CLASS и приоритета THREAD_PRIORITY_TIME_CRITICAL. В Qt нет возможности установки класса приоритета, поэтому решением может быть вызов WINAPI ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);, установка класса через TaskManager и установка класса приоритета в момент запуска приложения: //cmd Код: start /REALTIME myprogram.exe //terminal Код: nice -n 20 myprogram Цитировать я вот посмотрел еще раз и в том топике пользователь жаловался, что нашел винапишное решение, а ему надо и на макось и на юникс, а в ассистанте написано "The effect of the priority parameter is dependent on the operating system's scheduling policy. In particular, the priority will be ignored on systems that do not support thread priorities (such as on Linux, see http://linux.die.net/man/2/sched_setscheduler for more details).", то как же ему это помогло... Судя по коду ниже, работа приоритетов возможна под linux, но не гарантируется.Код --- У меня установка приоритета работает и до запуска цикла событий... Код
Видимо с тех пор многое изменилось... Название: Re: priority основного потока (GUI) Отправлено: kkk777kkk от Февраль 25, 2010, 10:03 решил таки воспользоваться винапи функциями:
Код: #ifdef Q_WS_WIN а если когда-то решится руководство на линух, то это будет RT линух и там это будет не так важно и будет достаточно (если вдруг понадобится) выставлять пририотеты только для потоков вторичных спасибо за помощь |