Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
3-67152
Иванов Сергей
2003-04-02 17:28
2003.04.21
Как в ib6 сравнить с null


14-67533
DaemonDZK
2003-04-04 13:53
2003.04.21
Векторная графика


1-67351
Delphinium
2003-04-09 21:26
2003.04.21
Memo


8-67400
Bananos
2003-01-20 00:00
2003.04.21
Bitmap.ScanLine


1-67342
_MAD_
2003-04-09 15:33
2003.04.21
Excel




   Наверх