Изменить приоритет собственного потока на Android в c / c ++

Insanely неясный pthread api для приоритета потока не только странно непонятен, но и он просто не работает на Android.

Итак, есть ли способ уменьшить или увеличить приоритет потока?

int currentPolicy; struct sched_param sched; status = pthread_getschedparam(pthread_self(), &currentPolicy, &sched); printf("sched.sched_priority:%d currentPolicy:%d", sched.sched_priority, currentPolicy); printf("priority min/max:%d/%d", sched_get_priority_min(currentPolicy), sched_get_priority_max(currentPolicy)); 

выходы:

Sched.sched_priority: 0 currentPolicy: 0

Приоритет min / max: 0/0

Кроме того, независимо от того, что я делаю, pthread_setschedparam всегда возвращает ошибку для меня (Invalid argument). В моем коде мне нужно уменьшить приоритет потока обработчика, чтобы убедиться, что другой поток использует больше времени процессора. Или, альтернативно, я мог бы повысить приоритет потока моего другого потока, который я хочу использовать как больше процессора по сравнению с другими потоками моего процесса.

Есть ли у меня способ сделать это? Я использую только собственный код на языке C ++.

Изменить: из этого сообщения видно, что потоки андроида – это какие-то легкие процессы и для изменения приоритетов для них следует использовать setpriority . Похоже, что функция работает (getpriority до и после указывает, что приоритет был изменен). Однако я не вижу ожидаемого эффекта в своем приложении.

Solutions Collecting From Web of "Изменить приоритет собственного потока на Android в c / c ++"

Темы Android – это потоки Linux. Ничего особенного в них нет.

setpriority() изменяет «хорошее» значение потока, которое влияет на приоритет, по которому запланирован поток.

pthread_setschedparam() может использоваться для изменения политики .

Вообще говоря, вы не можете повысить приоритет или изменить свою политику без повышенных привилегий ( CAP_SYS_NICE ). Вы можете опустить его или вернуть его к «нормальному» приоритету.

Если вы используете adb shell ps -t -p вы можете видеть приоритеты, назначенные каждому потоку. Эта информация также включена в даллаки Dalvik.

Dalvik использует setpriority() для временного повышения приоритета потока GC, если это необходимо (чтобы избежать инверсии приоритета). Если вы посмотрите на этот бит кода вокруг строки 625, вы можете его увидеть. Вы также можете вызвать вызов set_sched_policy() , функции библиотеки Android, которая изменяет, в какой группе находится поток.

Вот простой ответ: используйте int nice(int increment) . Он объявлен в unistd.h

Вот код функции от Android:

 int nice(int increment) { int priority = getpriority(PRIO_PROCESS, 0); return setpriority( PRIO_PROCESS, 0, priority+increment); } 

Поэтому, setpriority может использоваться для установки приоритета потока. Я действительно получил разницу, как ожидалось, в моем коде, используя nice(-10) или nice(10)

Невозможно установить приоритет потока POSIX в Android. Функции nice() и setpriority() настраивают приоритет процесса, а не одного потока.