Главная страница
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.017 c
1-67252
id_privin
2003-04-07 18:48
2003.04.21
непонятный глюк командной строги в XP


1-67296
Demon_mhm
2003-04-09 05:51
2003.04.21
помогите с TListView


14-67469
Sheng
2003-04-02 21:51
2003.04.21
Сеть XP и 98


3-67090
MXA
2003-04-02 18:43
2003.04.21
Число измененных записей


1-67288
Zheka
2003-04-10 16:59
2003.04.21
StringGrid и способы сохранения таблиц