Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Информация о приоритетах потоков и процессов


Автор: takedo 27.9.2005, 11:22
Добрый день!
Появилась проблема. Если в системе появляется более приоритетный поток(потоки) у меня может наступить "голодание", то есть моя программа со своими потоками не получит процессорное время (запускал CPUStress и понял, что это может быть проблемой). Поэтому появляется вопрос: Как отследить, что в системе появились или не появились не системные процессы(они вообще RealTime), для того, чтобы задать своим потокам равный приоритет? Главное ведь как я понимаю не только определить, что появился такой поток, но и во время(то есть до начала его работы) повысить приоритет своих потоков или снизить в случае завершения такого потока. Еще необходимо учесть, что виндовс сама повышает приоритет на некоторое время потоков, которые получили активность. Возможно ли все это осуществить? Поделитесь опытом, у кого он есть. Или идеяи, пожалуйста. smile

Автор: _hunter 27.9.2005, 11:44
не понял проблемы... если программа должна работать при любых приоритететах сосуществующих процессов -- дай своей программе максимальный приоритет...
зачем такое шаманство?

Автор: takedo 27.9.2005, 12:20
если запустить программу с максимальным приоритетом, то система будет а) тормозить, б) никакие другие программы не смогут работать. А система стоит на персональном ПК, где люди должны иметь возможность выполнять и ещё какие-нибудь действия. Но программа должна гарантированно получать данные при любых действиях пользователей и обновлять отображенную информацию, писать архивы и т.д.. Просто запретить пользователям использовать возможность изменения приоритетов можно, но не красиво - нет гарантии, что кто-нибудь не запустит с высоким приоритетом! Проблемы не будет, если на компьютер ставить только одну эту программу - это не серьезно. Коенчно, если поставить на Windows CE, то можно будет по таймеру выставить работу моих потоков. Однако, вопрос о распределении процессорного времени в системе реального времени Windows CE не нашел ответа ни в одном из форумов, а я пока этого тоже не знаю. Вот поэтому и хотелось бы сделать так как описано в вопросе.

Автор: _hunter 27.9.2005, 12:37
система и так будет тормозить -- ты в момент запуска тяжелого процесса еще и своему приоритет повышаеш.
если твоя программа просто болтается в фоне ожидая тыка от пользователя даже с самым высоким приоритетом систему она грузить не будет ( если там, конечно, вечный цикл без паузы не не крутится )
писать архивы с максимальным приоритетом -- вообще убийство ( поставь рару хотябы normal и все поймеш )

Автор: takedo 27.9.2005, 12:57
Цитата
( поставь рару хотябы normal и все поймеш )
- не понял.
А вообще-то я в программе делаю посылки в ComPort и получаю ответы. Все это должно отображаться. И любые изменения в параметрах устройств должны быть отображены с максимальной приближенностью ко времени реального изменения параметров. И как ты представляешь решение такого вопроса?

Автор: _hunter 27.9.2005, 13:15
Цитата
- не понял.

ты писал:
Цитата
, писать архивы и т.д..

и при этом хотел чтобы у программы был максимальный приоритет. вот я и предложил посмотреть что это будет...

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

Автор: takedo 27.9.2005, 13:33
данные то я в любом случае не потеряю smile - так уж все устроено, только получу позже.

Автор: _hunter 27.9.2005, 13:44
то же самое касается отрисовки...
хотя теперь вообще не понятно в чем проблема smile
если данные ты в любом сучае получиш то ты их и отрисовать всегда сможеш... и значи тс приоритетами играться не нужно...

Автор: takedo 27.9.2005, 14:00
но получу то я их только тогда когда запрошу, могу потерять - таки некоторые переходные процессы. А отрисовывать надо, чтобы опереторы среагировали таки - Это раз. И вообще-то из основного окна иногда необходимо менять конфигурацию и параметры устройствов.

Автор: takedo 27.9.2005, 14:26
так нет что-ли способа все-таки хотя бы узнать, когда загружается другой процесс?

Автор: _hunter 27.9.2005, 14:37
1: значит нужно выставлять максимальные приоритеты.
2: http://www.rsdn.ru/forum/Message.aspx?mid=562207
и дальше по ссылкам smile

Автор: takedo 4.10.2005, 12:46
можно обойтись и не выставляя максимальные приоритеты, немного подумав, можно их менять по ходу дела! smile

Автор: mo3art 4.10.2005, 18:32
Цитата(takedo @ 27.9.2005, 12:20)
если запустить программу с максимальным приоритетом, то система будет а) тормозить, б) никакие другие программы не смогут работать

- я чего-то не понимаю... если программа написана правильно, то она загружает ресурсы именно настолько, насколько ей они требуются - таким образом получается что "торможение" компа и работа других программ не должны зависеть от приоритета твоей программы. Чтение портов выполняй с максимальным приоритетом, а рисование и скидывание на диск с нормальным... расчётные задачи тоже можно выполнять с повышенным приоритетом, но не с реалтайм - использование объектов синхронизации спасёт процессор от ненужной работы... smile

ЗЫ - кстати, процесс с большим приоритетом ты просто не увидишь из своей программы - она вообще не попадёт на проц пока такой процесс юзает систему... smile))
ЗЗЫ - Имхо, менять приоритеты это шаманство...
ЗЗЗЫ - хотя конечно, если хочется, можешь изловчиться перехватывать вызовы CreateProcess и CreateThread ;)

Автор: takedo 5.10.2005, 14:09
Цитата
- я чего-то не понимаю... если программа написана правильно

А чего не понятного, елси программа не игрушка, а аля система управления, то появление в системе процесса, загружающего систему приведет к нежелательным последствиям.
Вообще-то всем спасибо, я разобрался и повышаю приоритет когда вижу, что не хватает проц. ресурсов smile

Автор: mo3art 5.10.2005, 14:58
Цитата(takedo @ 5.10.2005, 14:09)
А чего не понятного

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)