Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-67646
fishca
2003-02-20 10:56
2003.04.21
Удаление программы из себя


3-67153
Денис
2003-04-03 11:54
2003.04.21
Забавная ошибка


7-67572
GrBob
2003-03-01 10:20
2003.04.21
Одновременное нажатие клавиш


14-67448
Satirus
2003-04-04 18:55
2003.04.21
Опять о взаимоотношениях:)


3-67117
opoloXAI
2003-04-02 17:47
2003.04.21
DBGrid Selected





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский