Привет!
Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
Вопрос общий, но пишу на С++ (может, есть особенности).
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Приоритет Idle установить не пробовал?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Процессорное время
От:
Аноним
Дата:
09.02.04 16:51
Оценка:
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
В отдельном потоке...
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Rosigma, Вы писали:
R>>Привет! R>>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>>Вопрос общий, но пишу на С++ (может, есть особенности). WH>Приоритет Idle установить не пробовал?
Достаточно даже below normal :)
По крайней мере, я такой приоритет выставляю в виртуальном дубе, когда конверчу видео (прога работает порядка часа), и у меня ничего не тормозит.
А у винампа наоборот выставляю high, тогда он не затыкается при скроллинге и прочей байде, которую я с компом творю :)
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Значит не читаем Рихтера
Хорошо описана работа планировщика задач
Берём и создаём отдельный поток для вычислительных задач и делаем ему приоритет ниже нормального.
О синхронизации ищите информацию сами, помоему тут где то в статьях должна валяться, так же была в журнале Программист (programme.ru момоему).
Флудеров много тут развелось
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
DВ системе должен быть какая-то галочка, может движок. (В ОС). Win 2000, по умолчанию, похоже ресурсы процессора распределяет автоматически равномерно между задачами.
И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Здравствуйте, Calve, Вы писали: C>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Нет, обычно это пишут в свойствах шортката, который эту программу запускает.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Calve, Вы писали: C>>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы. S>Нет, обычно это пишут в свойствах шортката, который эту программу запускает.
А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)
Здравствуйте, dshe, Вы писали:
D>А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)
Упс, виноват. И правда нету. Я обычно если надо управлять приоритетом приложения, запускаю его из командной строки. у команды start есть ключики, которые определяют приортиет (см. help start). Честно говоря, я ожидал, что все они в шорткутах продублированы. Ан нет, только рабочий фолдер там и есть.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Гы-гы, поставь Sleep(50) внутри вычислительных циклов
А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
Здравствуйте, Gaperton, Вы писали:
G>Здравствуйте, Rosigma, Вы писали:
R>>Привет! R>>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>>Вопрос общий, но пишу на С++ (может, есть особенности).
G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов
G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
А этому потоку легко можно понизить приоритет.
Re[2]: Процессорное время: Sleep(50) Rulez!
От:
Аноним
Дата:
20.02.04 10:52
Оценка:
Здравствуйте, Gaperton, Вы писали:
G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов
G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
Да уже Sleep(0) дает хороший эффект
Здравствуйте, Gaperton, Вы писали:
G>Гы-гы, поставь Sleep(50) внутри вычислительных циклов
G>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages.
Sleep в этих случаях жрет проц не хуже обычного цикла, также приложение просто виснет пока Sleep не завершится
лучше таки использовать отдельный поток с уменьшенным приоритетом
Здравствуйте, gandalf_g, Вы писали:
_>Здравствуйте, Gaperton, Вы писали:
G>>Гы-гы, поставь Sleep(50) внутри вычислительных циклов
G>>А на самом деле вычисления надо запускать отдельным потоком. И 100% процессорного времени здесь совершенно не причем (что станет очевидно, если использовать Sleep(50) ).
_>
You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages.
_>Sleep в этих случаях жрет проц не хуже обычного цикла, также приложение просто виснет пока Sleep не завершится
Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.
_>лучше таки использовать отдельный поток с уменьшенным приоритетом
Отдельный. А приоритет уменьшать только по показаниям в соответствии с клинической картиной. Самолечением не заниматься
Здравствуйте, Gaperton, Вы писали:
G>Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.
решил капнуть в сторону Sleep, добрался до ntdll а там
INT 2eH: выполнить команду DOS (нет в документации)
Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.
вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Здравствуйте, gandalf_g, Вы писали:
_>решил капнуть в сторону Sleep, добрался до ntdll а там
_>
INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.
_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Ядро операционной системы именно таким образом (через прерывания) и получает управление. Это вовсе не пережиток DOS -- это особенности архитектуры процессора.
Здравствуйте, gandalf_g, Вы писали:
_>Здравствуйте, Gaperton, Вы писали:
G>>Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.
_>решил капнуть в сторону Sleep, добрался до ntdll а там
_>
INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.
_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Давайте я попробую догадаться . Дальше, мне думается, там происходит то же самое, что и во всех остальных операционных системах, а именно: текущий поток(процесс) на заданное время исключается из цикла работы планировщика задач, что приводит к тому, что поток не получает ни одного кванта процессорного времени заданное количество милисекунд. А дальше как получится, на общих основаниях