Официальный форум СВД Встраиваемые Системы
16 Декабря, 2017, 19:57:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Задание приоритета потока  (Прочитано 1360 раз)
chuzhik
Пользователь

Сообщений: 32


« : 18 Мая, 2012, 14:40:02 »

Добрый день

Подскажите, пожалуйста, пару моментов.

У нас есть программа под QNX 6.3, бОльшую часть окна которой занимает PtRaw, рядом находится панель с кнопками. На PtRaw рисуется графическая информация. Кнопки управляют режимом отрисовки. Недавно наблюдал такую ситуацию: когда информации приходит слишком много, обработчик нажатия кнопки не срабатывает. Видимо, в этот поток просто не передается управление.

PtRaw перерисовывается по таймеру - в отдельном потоке функция, получающая сообщения от таймера и вызывающая функцию перерисовки PtRaw.

Первое, что пришло в голову - запустить этот поток с пониженным приоритетом.

    pthread_attr_init(&attr_damage);
    pthread_attr_setinheritsched(&attr_damage, PTHREAD_EXPLICIT_SCHED);
    pthread_attr_setschedpolicy(&attr_damage, SCHED_RR);
    params.sched_priority = 8;
    params.sched_curpriority  = 8;
    pthread_attr_setschedparam(&attr_damage, &params);
   
    int res = pthread_create(&trArm_damage, &attr_damage, s_damage, this);

Набираю в консоли pidin|grep "my_prog". Все потоки в программе имееют один и тот же приоритет - 10.

Подскажите, пожалуйста, как правильно запустить один из потоков с приоритетом ниже, чем у остальных потоков этого же процесса.
Может быть есть еще какой-то путь, позволяющий повысить приоритет нажатия кнопок в программе?

Записан
Андрей Сеньков
Администратор
Опытный пользователь

Сообщений: 274



WWW
« Ответ #1 : 21 Мая, 2012, 12:09:22 »

Возможно, причина такого поведения в т.н. приоритете пульса (если таймер использует пульсы для уведомлений).

Поле sigev_priority в структуре sigevent для пульсов задает приоритет с которым этот пульс будет обрабатываться. Если при инициализации, например, с помощью SIGEV_PULSE_INIT,  приоритет задается как SIGEV_PULSE_PRIO_INHERIT то поток будет обрабатывать пульс с исходным приоритетом.

Записан

denis_73
Пользователь

Сообщений: 17


« Ответ #2 : 26 Июля, 2017, 14:49:23 »

При SIGEV_PULSE_PRIO_INHERIT поток почему-то обрабатывает пульс не со своим текущим и даже не со своим исходным приоритетом, а с исходным приоритетом 1-го потока (с которомым была запущена программа), даже если приоритет 1-го потока был изменён сразу при его запуске. А при запуске из-под Momentics - с 10 приоритетом, даже если программа была запущена с другим приоритетом.
Почему так?
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 3007



WWW
« Ответ #3 : 18 Августа, 2017, 14:21:49 »

При SIGEV_PULSE_PRIO_INHERIT поток почему-то обрабатывает пульс не со своим текущим и даже не со своим исходным приоритетом, а с исходным приоритетом 1-го потока (с которомым была запущена программа), даже если приоритет 1-го потока был изменён сразу при его запуске. А при запуске из-под Momentics - с 10 приоритетом, даже если программа была запущена с другим приоритетом.
Почему так?

Извиняюсь за задержку с ответом. Не решился ещё вопрос? Если вопрос остался, то перешлите нам код программы, которая иллюстрирует данную проблему, чтобы мы могли проверить её работу на нашем стенде.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2017 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 24 Октября, 2017, 13:16:18