| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Приоритет программы |
| Автор: profesiachuvak 16.12.2009, 13:24 | ||
| Здравствуйте друзья, начну с кода: var
Если в SetPriorityClass указать HIGH_PRIORITY_CLASS , то загрузка процессора при выполнении программы 100%. Мне нужен максимально высокий приоритет моей программы, но не до такой степени. Вопрос в следующем: 1. Какой же класс приоритета будет оптимальным? 2. Какие ещё классы приоритета существуют? (есть ли числовой эквивалент HIGH_PRIORITY_CLASS и др.) 3.Грамотно ли вообще реализован приоритет в моём коде? 4.Нужно ли устанавливать приоритет потока в данном случае? |
| Автор: Демо 16.12.2009, 15:11 |
| Сразу же несколько вопросов. Для чего? Опять же - чего добиться хочешь? С точки зрения синтаксиса - всё грамотно. В каком? Ты задаёшь вопросы, но не говоришь для чего это нужно. |
| Автор: profesiachuvak 18.12.2009, 18:16 | ||
Прошу прощения, косяк с интернетом был. Отвечаю на ваши вопросы : в моей программе реализован сверхточный таймер (до 10 мкс), считает он выполнение процедуры. Проблема в том что с обычным приоритетом возникает погрешность в вычислении точного времени. То есть необходимая точность обеспечивается только с высоким приоритетом. Для сравнении : Приоритет который я указал в коде : время выполнения 8 +/- 2 мкс Без указания приоритета : время выполнения 8 +/- 9 мкс (приблизительно, но разбежка ощутима) Вот я и хотел бы узнать что именно мне надо. Вопросы остаются те же. |
| Автор: bems 18.12.2009, 18:45 |
| стопроцентная загрузка будет при любом приоритете, если программе есть что делать и она не простаивает. Приоритет влияет только на то, кто получит время при конкуренции. |
| Автор: ~FoX~ 18.12.2009, 22:39 |
| profesiachuvak, Что бы снизить погрешность REALTIME_PRIORITY_CLASS, точность что надо... В остальном: 1. На разных машинах будут разные результаты в том числе и погрешность. 2. Более того при разных запущенных приложениях показатели будут разными. Из 1 и 2 => Выбрать подходящий можно только империческим путем... |
| Автор: bems 21.12.2009, 00:09 | ||||
Предположим что у тебя самый низкий приоритет. Когда нет конкурирующих потоков, то даже с этим приоритетом ты получишь процессорное время, и загрузка будет 100% до тех пор, пока не появится поток с более высоким. Когда управление получает этот поток, то ты голодаешь, да, но процессор-то не простаивает. Он выполняет этот высокоприоритетный поток. Загрузка остается высокой. Когда ему больше нечего делать, то снова процессор занят тобой. Он будет простаивать тольео там, где все потоки находятся в ожидании. Поскольку речь о продолжительной фоновой работе, то ты всегда готов действовать, занчит загрузка 100% |
| Автор: profesiachuvak 21.12.2009, 00:27 |
| bems, Не буду с Вами спорить, я не сведущ в физике процесса загрузки процессора. Просто то что Вы писали в первом своём сообщении, скорее была просто отписка, поэтому это вызвало у меня негодование и непонимание. А вообще мы отошли от темы. Вопросы остались открытыми. |
| Автор: Демо 21.12.2009, 01:37 |
Что конкретно считает? Если вычисляет, какое время выполняется некий код, то для этого не нужно ни таймеры, ни приоритеты изменять... |
| Автор: profesiachuvak 21.12.2009, 15:00 | ||
Демо, Ваше предложение как подчитать с какой частотой вкл\выкл контакт на LPT порту ? Именно эту процедуру я и замеряю. |
| Автор: dvamaster 22.12.2009, 08:20 |
| чтоб не было 100% загрузки надо модифицировать поток обоспечивающий таймер есть http://msdn.microsoft.com/en-us/library/dd743609(VS.85).aspx |