| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Информация о приоритетах потоков и процессов |
| Автор: takedo 27.9.2005, 11:22 |
| Добрый день! Появилась проблема. Если в системе появляется более приоритетный поток(потоки) у меня может наступить "голодание", то есть моя программа со своими потоками не получит процессорное время (запускал CPUStress и понял, что это может быть проблемой). Поэтому появляется вопрос: Как отследить, что в системе появились или не появились не системные процессы(они вообще RealTime), для того, чтобы задать своим потокам равный приоритет? Главное ведь как я понимаю не только определить, что появился такой поток, но и во время(то есть до начала его работы) повысить приоритет своих потоков или снизить в случае завершения такого потока. Еще необходимо учесть, что виндовс сама повышает приоритет на некоторое время потоков, которые получили активность. Возможно ли все это осуществить? Поделитесь опытом, у кого он есть. Или идеяи, пожалуйста. |
| Автор: _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 | ||
А вообще-то я в программе делаю посылки в ComPort и получаю ответы. Все это должно отображаться. И любые изменения в параметрах устройств должны быть отображены с максимальной приближенностью ко времени реального изменения параметров. И как ты представляешь решение такого вопроса? |
| Автор: _hunter 27.9.2005, 13:15 | ||||
ты писал:
и при этом хотел чтобы у программы был максимальный приоритет. вот я и предложил посмотреть что это будет... если читаеш из порта -- смело ставь максимальный приоритет -- всеравно синхронизация по событию. и тут варианта только два -- или не _загружать_ систему и терять данные или не терять данные но _загружать_ систему. |
| Автор: takedo 27.9.2005, 13:33 |
| данные то я в любом случае не потеряю |
| Автор: _hunter 27.9.2005, 13:44 |
| то же самое касается отрисовки... хотя теперь вообще не понятно в чем проблема если данные ты в любом сучае получиш то ты их и отрисовать всегда сможеш... и значи тс приоритетами играться не нужно... |
| Автор: 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 и дальше по ссылкам |
| Автор: takedo 4.10.2005, 12:46 |
| можно обойтись и не выставляя максимальные приоритеты, немного подумав, можно их менять по ходу дела! |
| Автор: mo3art 4.10.2005, 18:32 | ||
- я чего-то не понимаю... если программа написана правильно, то она загружает ресурсы именно настолько, насколько ей они требуются - таким образом получается что "торможение" компа и работа других программ не должны зависеть от приоритета твоей программы. Чтение портов выполняй с максимальным приоритетом, а рисование и скидывание на диск с нормальным... расчётные задачи тоже можно выполнять с повышенным приоритетом, но не с реалтайм - использование объектов синхронизации спасёт процессор от ненужной работы... ЗЫ - кстати, процесс с большим приоритетом ты просто не увидишь из своей программы - она вообще не попадёт на проц пока такой процесс юзает систему... ЗЗЫ - Имхо, менять приоритеты это шаманство... ЗЗЗЫ - хотя конечно, если хочется, можешь изловчиться перехватывать вызовы CreateProcess и CreateThread ;) |
| Автор: takedo 5.10.2005, 14:09 | ||
А чего не понятного, елси программа не игрушка, а аля система управления, то появление в системе процесса, загружающего систему приведет к нежелательным последствиям. Вообще-то всем спасибо, я разобрался и повышаю приоритет когда вижу, что не хватает проц. ресурсов |
| Автор: mo3art 5.10.2005, 14:58 | ||
- непонятно почему твоя программа при повышении приоритета загружает систему только это... |