Здравствуйте, dshe, Вы писали:
D>Ядро операционной системы именно таким образом (через прерывания) и получает управление. Это вовсе не пережиток DOS -- это особенности архитектуры процессора.
эт ясн пончик, достаточно на ntdll посмотреть, а вот какже Sleep все таки работает, похоже что ядро системы просто пропускает поток при распределении ресурсов проца (пока не окончится задержка), если сей тезис верен, то sleep действительно не нагружает проц, а наоборот освобождает)
Здравствуйте, Gaperton, Вы писали:
G>Давайте я попробую догадаться . Дальше, мне думается, там происходит то же самое, что и во всех остальных операционных системах, а именно: текущий поток(процесс) на заданное время исключается из цикла работы планировщика задач, что приводит к тому, что поток не получает ни одного кванта процессорного времени заданное количество милисекунд. А дальше как получится, на общих основаниях
кажись я повторился) итог вообщим прост, юзайте sleep как можно чаще =)
Have fun...
Re: Процессорное время
От:
Аноним
Дата:
01.03.04 11:26
Оценка:
Здравствуйте, Rosigma, Вы писали:
R>Привет! R>Как разрабатывать приложение, чтобы оно не занимало 100% процессорного времени при сложных вычислительных задачах? R>А то все "висит", пока эти вычисления происходят. Как от этого избавиться? R>Вопрос общий, но пишу на С++ (может, есть особенности).
Длинные вычисления не должны тормозить другие программы в системе и интерфейс самой программы, занимающейся этими вычислениями. Сделать это можно так.
Программа рисует элипсы с помощью функции DrawEllipse( hWnd ); в цикле после старта
т.к. в цикле не извлекаются сообщения из системной очереди, другие программы не могут их извлекать для себя. Все ждут завершения рисования 2048-и элипсов.
Словом запуская процедуру или поток с длинными вычислениями надо где-либо в середине этих вычислений освобождать очередь оконных сообщений.
Андрей.
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.
Надо же, как быстро Билл Гейтс стал списывать программы.