Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизNot Responding и таймеры... Найти похожие ветки
← →
незнайка (2003-04-09 10:59) [0]Привет всем..
Ситуация такова, что как только запускается одна из подпрограмм (которая загружает диск и процессор почти полностью) система,на время работы подпрограммы, пишет (в списке приложений), что приложение не отвечает. Во время работы этой подпрограммы таймеры отказываются работать... Как только подпрограмма отработала, то все приходит на круги своя... Что делать? Работающие таймеры мне очень нужны...
← →
Digitman (2003-04-09 11:03) [1]что это за подпрограмма такая хитрая ? код приводи
← →
jel (2003-04-09 11:08) [2]В цикле вешающей систему подпрограммы вызывай Application.ProcessMessages
или эту процедуру гоняй в отдельном потоке (если там нет цикла)
← →
незнайка (2003-04-09 11:09) [3]там ничего хитрого нет.. открывает диск на чтение (как physicaldrive), читает сектора в поток, оттуда архивирует и кладет на другой диск.. вот и все..
← →
Bel (2003-04-09 11:12) [4]Application.ProcessMessages
← →
Digitman (2003-04-09 11:21) [5]Вообще говоря, операция доступа к носителю на физ.уровне, как правило, высокоприоритетна для системы. В момент чтения/записи сектора приоритет исполняемого в кодовом потоке кода ( вызываемого через шлюз) может быть наивысшим (вплоть до real-time critical), при этом прерывания могут быть и запрещены на момент выполнения критчичной по времени операции.
Так что, если некая процедура приложения вызывает такого рода шлюзы циклически, вполне может быть необходимым итеративно вызывать код обработки тек.сообщений (потокам и окнам тек.процесса)
← →
незнайка (2003-04-09 11:24) [6]To Jel & Bel: да, так все заработало.. спасибо.. =)
← →
незнайка (2003-04-09 11:27) [7]To: Digitman А вот как бы оценить, сколько по времени будет длиться вызов, например Application.ProcessMessages ?
← →
Rol (2003-04-09 11:30) [8]например, GetTickCount
← →
Digitman (2003-04-09 11:40) [9]
> незнайка
а это так критично для тебя ? если - да, то альтернативно можно реализовать собственный, упрощенный код итерации для обработки сообщений, скажем, по след.шаблону :
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
if Msg.hWnd = 0 then
Dispatch(Msg.Message)
else
begin
TranslateMessage(Msg); // как правило, не требуется для доп.код.потока
DispatchMessage(Msg);
end
← →
Anatoly Podgoretsky (2003-04-09 12:07) [10]незнайка (09.04.03 11:27)
Меньше одной микросекунды, применрно немколько миллионов вызовов в секунду, а вот обратотка сообщений если такие будут до бесконечности.
← →
незнайка (2003-04-10 22:52) [11]Спасибо всем ...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c