Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.21;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
4-67631
ers
2003-02-19 17:31
2003.04.21
Как закрыть программу зная её Handle?


4-67623
Nemo
2003-02-21 02:05
2003.04.21
Проблемы с клавишами и приложениями. Откликнитесь!!!


7-67577
Aric
2003-02-27 18:29
2003.04.21
Захват изображения с видеокамеры


3-67128
DenKop
2003-04-01 22:23
2003.04.21
SQL, Поиск строки независимо от регистра


6-67411
HDD
2003-02-27 16:41
2003.04.21
Помогите пожалуйста!