Форум: "Основная";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Внизтормозит таймер !!! Найти похожие ветки
← →
Maksss (2003-01-03 19:44) [0]проблема такая :
таймер следит за клиентсокетом во время конектинга(приконектился он или нет) интервал 1 время таймаута 6000(тоесть если за 6 секунд не произошло соединение знчит оборвать его и начать с начала) но на самом деле этот интервал длится около 1.5 минуты
уважаемые мастаки подскажите в чём тут проблема?
п.s.
kлиентсокет самопальный и иногда не даёт результата kонект или kонект файлед
к таймеру подключён прогрессбар .
← →
TTCustomDelphiMaster (2003-01-03 20:05) [1]Вероятно пока клиентсокет конектится, он не дает обрабатывать приложению сообщения. Нужно запускать в отдельном потоке клиентсокет или таймер, или взять проверенного клиентсокета
← →
Rouse_ (2003-01-03 20:26) [2]Практически 100% нет или неправильно реализована работа в потоке. Лучше привести код самопального сокета. Их правильная реализация практически в 80% вызывает затруднения у большинства начинающих программистов.
Желаю успехов
← →
Maksss (2003-01-03 20:43) [3]>TTCustomDelphiMaster
поведай плыз как запустить таймер в отдельном потоке
сокет это аськин компонент приводить его полный код не буду(трафик)
← →
Mozart (2003-01-03 20:49) [4]Таймер надо делать самопальный:
т.к. тот, что поставляется с Дельфёй - это лажа полная, которая основывается на вычислениях..... И точным его назвать мягко говоря нельзя. Почему у тебя аж 1.5минуты - наверно проц загружен сильно.....
Короче говоря возьми этот таймер, поставь в нём 1млсек интервал, и всё время проверяй: изменилось ли время...
Var
NachTime:TDateTime;
NachTime:=now {в начале соединения}
Tmer....
begin
if now>=NachTime+EncodeTime(0,0,6,0) then "Disconnect"
end;
← →
Morfein (2003-01-03 21:32) [5]2 Mozart : тот таймер, что поставляется с делфёй(он же известен под кодовым словом "лажа"), поставляется также и вместе с виндой... более того, основан он на вычислениях, которые делает ядро системы, а не сама делфи(как ты похоже подумал). Чтобы этот таймер начал работать с неправильным интервалом, надо просто сумасшедше переполнить очередь сообщений данного окна... или иметь достаточно медленный процессор...
← →
Mozart (2003-01-03 21:59) [6]2 Morfein Я так и думал, как раз, когда происходит коннект - очень сильно перегружается проц, особенно, если коннектиться ВинМодем ...
Тот способ, который предложил я не очень хорош, но действет чётко... (с небольшой погрешностью)
← →
Morfein (2003-01-03 22:13) [7]Проц при коннекте нагружается так, что в система перестаёт посылать WM_TIMER?!
Что-то сомнительно... Теперь о точности... человеку же не атомные часы нужно делать... он хочет сделать простой отсчёт времени, причём, используя TTimer ему не придётся делать отдельный поток под него(если клиент не кривой)... а с твоим методом поток нужен.
← →
TTCustomDelphiMaster (2003-01-03 22:36) [8]Maksss (03.01.03 20:43)
Таких таймеров полно, сделаны отдельными компонентами. Вы лучше своего клиента выпрямите и все будет работать с обычным таймером.
← →
Maksss (2003-01-04 05:11) [9]ни каких перегрузок процесора нет (1200 мг) загрузка примерно 5-10%
приоритет тайм критикал ничего не дал проблем либо сокет перехватывает мессаги либо я не знаю.
как хотябы выяснить причину?
← →
Действительно (2003-01-05 04:18) [10]вопрос, конечно, интересный! Особенно в смысле "интервал 1 время таймаута 6000" - это из первого поста автора. Разумно предположить, что вышеупомянутый так и сделал, т.е. поставил
Interval:=1
а в OnTimer считает количество вызовов сего события.
Неужели он, наивный, действительно думает, что сии события ему будут следовать через 1 мс (а не через ~55мс в W9x или через ~10мс в WinNT?
← →
Maksss (2003-01-09 02:00) [11]>Действительно
уже образумился под 9х
таймер = 1000 интервал 6
под NT быстрее
всем спасибо!!! тема закрыта
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c