Здравствуйте, gandalf_g, Вы писали:
_>решил капнуть в сторону Sleep, добрался до ntdll а там
_>
INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.
_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Ядро операционной системы именно таким образом (через прерывания) и получает управление. Это вовсе не пережиток DOS -- это особенности архитектуры процессора.
Здравствуйте, dshe, Вы писали:
D>А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)
Упс, виноват. И правда нету. Я обычно если надо управлять приоритетом приложения, запускаю его из командной строки. у команды start есть ключики, которые определяют приортиет (см. help start). Честно говоря, я ожидал, что все они в шорткутах продублированы. Ан нет, только рабочий фолдер там и есть.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Приоритет Idle установить не пробовал?
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Calve, Вы писали: C>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Нет, обычно это пишут в свойствах шортката, который эту программу запускает.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, dshe, Вы писали:
D>Ядро операционной системы именно таким образом (через прерывания) и получает управление. Это вовсе не пережиток DOS -- это особенности архитектуры процессора.
эт ясн пончик, достаточно на ntdll посмотреть, а вот какже Sleep все таки работает, похоже что ядро системы просто пропускает поток при распределении ресурсов проца (пока не окончится задержка), если сей тезис верен, то sleep действительно не нагружает проц, а наоборот освобождает)
Have fun...
Re: Процессорное время
От:
Аноним
Дата:
01.03.04 11:26
Оценка:
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Длинные вычисления не должны тормозить другие программы в системе и интерфейс самой программы, занимающейся этими вычислениями. Сделать это можно так.
Программа рисует элипсы с помощью функции DrawEllipse( hWnd ); в цикле после старта
т.к. в цикле не извлекаются сообщения из системной очереди, другие программы не могут их извлекать для себя. Все ждут завершения рисования 2048-и элипсов.
Привет!
Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах?
А то все "висит", пока эти вычисления происходят. Как от этого избавиться?
Вопрос общий, но пишу на С++ (может, есть особенности).
Здравствуйте, 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, по умолчанию, похоже ресурсы процессора распределяет автоматически равномерно между задачами.
И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Calve, Вы писали: C>>И еще? приоритет задачи должен где-то указываться. Обычно это пишутт в директивах компилятора в тексте программы. S>Нет, обычно это пишут в свойствах шортката, который эту программу запускает.
А где? Я не нашел (может надо где-то еще какой-то чекбокс поставить, чтобы приоритет задачи появился в свойствах шортката?)
Здравствуйте, 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, Вы писали:
_>Здравствуйте, Gaperton, Вы писали:
G>>Это, кстати, не одно и то же. Приложение (вернее, поток) виснет, но проц при этом (!) — не жрет! Время отклика и загрузка процессора — разные вещи, что и должен был иллюстрировать пример со Sleep. Это хорошо, если процессор загружен на 100% по делу.
_>решил капнуть в сторону Sleep, добрался до ntdll а там
_>
INT 2eH: выполнить команду DOS (нет в документации)
_>Это НЕДОКУМЕНТИРОВАННОЕ прерывание выполняет команду DOS, как если бы эта команда была введена в ответ на подсказку DOS.
_>вот вам и ДОС рулез форева. че там дальше происходит остается только догадываться
Давайте я попробую догадаться . Дальше, мне думается, там происходит то же самое, что и во всех остальных операционных системах, а именно: текущий поток(процесс) на заданное время исключается из цикла работы планировщика задач, что приводит к тому, что поток не получает ни одного кванта процессорного времени заданное количество милисекунд. А дальше как получится, на общих основаниях
Здравствуйте, Gaperton, Вы писали:
G>Давайте я попробую догадаться . Дальше, мне думается, там происходит то же самое, что и во всех остальных операционных системах, а именно: текущий поток(процесс) на заданное время исключается из цикла работы планировщика задач, что приводит к тому, что поток не получает ни одного кванта процессорного времени заданное количество милисекунд. А дальше как получится, на общих основаниях
кажись я повторился) итог вообщим прост, юзайте sleep как можно чаще =)
Have fun...
Re[2]: Процессорное время
От:
Аноним
Дата:
01.03.04 11:57
Оценка:
А>т.к. в цикле не извлекаются сообщения из системной очереди, другие программы не могут их извлекать для себя. Все ждут завершения рисования 2048-и элипсов.
Это мы про win3.x?
Bли под win9x это до сих пор так?
У каждой программы (более того, у каждого thread'а) своя очередь сообщений.
Здравствуйте, <Аноним>, Вы писали:
А>В функции main() обработка сообщений осуществляется следующим образом
А>while( GetMessage( &msg, NULL, 0, 0 ) ) А>{ А> TranslateMessage( &msg ); А> DispatchMessage( &msg ); А>}
А>т.к. в цикле не извлекаются сообщения из системной очереди, другие программы не могут их извлекать для себя. Все ждут завершения рисования 2048-и элипсов.
Это перестало иметь отношение к действительности примерно 10 лет назад, с выходом Windows 95. То, о чем вы говорите, имело место только под Win16.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Процессорное время
От:
Аноним
Дата:
01.03.04 12:25
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
S>Это перестало иметь отношение к действительности примерно 10 лет назад, с выходом Windows 95. То, о чем вы говорите, имело место только под Win16.
Надо же, как быстро Билл Гейтс стал списывать программы.