Boost: как установить приоритет программы? - PullRequest
4 голосов
/ 02 декабря 2010

Как установить приоритет программы / потока (когда речь идет о потоках, я имею в виду те, которые созданы с использованием библиотеки Boost) с использованием библиотеки Boost C ++?Я имею в виду кроссплатформенный способ ...

Ответы [ 3 ]

4 голосов
/ 02 декабря 2010

В самом Boost нет обобщенной поддержки кроссплатформенных приоритетов.

#ifdef твой друг ...

См. Ответ Тома для решения win32.

В Linux вы используете вызов nice (или, возможно, setpriority). Не откладывайте на заявления тех документов, что они корректируют приоритет process ; в Linux поток - это просто процесс, который разделяет пространство памяти с некоторыми другими процессами / процессами. Если вы получите лучшую версию «top», в которой перечислены отдельные темы, вы можете увидеть хорошие уровни каждой из них.

Обратите внимание, что процесс / поток с обычными привилегиями пользователя может только уменьшить свой приоритет (более высокое значение "nice") в Linux. Немного работы с приоритетами, которые я сделал для Windows, казалось, что все идет (но это было в XP; ситуация может быть другой после Vista, UAC и т. Д.).

2 голосов
/ 02 декабря 2010
1 голос
/ 08 декабря 2010

Комментарий предыдущего ответа о Windows, позволяющий пользователям изменять приоритеты на все, что им нужно, частично верен, за исключением пары - во-первых, класс приоритетов в реальном времени обычно не допускается (даже с повышением UAC). Требуется специальный токен безопасности. Этот токен обычно доступен администраторам, но процесс должен запросить его.

Кроме того, по крайней мере в Vista + повышение класс приоритета внешнего процесса является правом, оставленным только для администраторов в политике безопасности по умолчанию. Однако это относится только к ВНЕШНИМ процессам - поэтому это не повлияет на вашу способность устанавливать собственный класс приоритета.

Пожалуйста, имейте в виду, что в Windows при изменении класса приоритета процесса вы меняете «базовый» приоритет всех потоков в этом процессе. Вы можете оставить класс приоритетов в нормальном состоянии и при необходимости настроить приоритеты определенных потоков (API SetThreadPriority против API SetPriorityClass). Это может быть предпочтительным для вашего собственного приложения.

Я не думаю, что это здесь, но предупреждение - если действует на внешний процесс (не свой собственный), никогда не меняет приоритеты отдельных потоков другой процесс. Вместо этого измените только класс приоритетов, чтобы все приоритеты потоков сохраняли одинаковую относительную разницу друг с другом в важности планирования.

Не существует кроссплатформенного способа сделать это, потому что поведение очень отличается. Директивы условной компиляции, как было предложено предыдущим автором, должны использоваться в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...