Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];

Вниз

помогите с пингом   Найти похожие ветки 

 
brother ©   (2010-07-14 11:19) [80]

> Это ты зря, ведешь его к stack overflow

в каком случае это будет?
зы интервал таймера 1000


 
Anatoly Podgoretsky ©   (2010-07-14 13:24) [81]

> brother  (14.07.2010 11:19:20)  [80]

Возможен повторный запуск в течение интервала. Надо просто исправить
функцию, что бы даже надежды на подобное не было.


 
brother ©   (2010-07-14 15:08) [82]

> Возможен повторный запуск в течение интервала

нет

if Work then
  Exit
else
  Work:= True;

не даст этого


 
Anatoly Podgoretsky ©   (2010-07-14 16:25) [83]

Application.ProcessMessages; перед этим позволит это.


 
Anatoly Podgoretsky ©   (2010-07-14 16:26) [84]

Тут нарушены принципы безопасной работы с сообщениями, таймер должен быть запрещен при входе и разрешен (при необходимости) при выходе из метода.


 
brother ©   (2010-07-15 08:19) [85]

Можно показать, как бы сделали вы?


 
Leonid Troyanovsky ©   (2010-07-15 08:44) [86]


> brother ©   (15.07.10 08:19) [85]

> Можно показать, как бы сделали вы?

Translate:

> таймер должен быть запрещен при входе и разрешен (при необходимости)
> при выходе из метода.


with Sender as TTimer do
 begin
   Enabled := False;
   ..
   Enabled := IsNeeded;
 end;

--
Regards, LVT.


 
brother ©   (2010-07-15 08:47) [87]

те на входе - тормозим, а на выходе стартуем... это понятно, но не понятно в каком случае

> if Work then
>   Exit
> else
>   Work:= True;

может дать stack overflow? простой пример, я чет не представляю, а хотелось бы...


 
Leonid Troyanovsky ©   (2010-07-15 09:58) [88]


> brother ©   (15.07.10 08:47) [87]

> может дать stack overflow? простой пример, я чет не представляю,
>  а хотелось бы...

Stack overflow на моем w2k3 сервере не получился.

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i : Longint;
begin
 for i := 0 to 1000000 do
   canvas.TextOut(0, 0, IntTostr(i));
 OutputDebugString(PChar( IntTostr(GetQueueStatus(QS_TIMER))));
end;

Максимум, что получилось - 1048592.

--
Regards, LVT.


 
brother ©   (2010-07-15 10:06) [89]

> if Work then
>  Exit
> else
>  Work:= True;

алгоритм где?


 
Anatoly Podgoretsky ©   (2010-07-15 10:09) [90]

> brother  (15.07.2010 08:47:27)  [87]

А чего тут представлять, у тебя есть ProcessMessages, который может получить
следующий тик таймера, а это весьма вероятно, поскольку таймер не запрещен и
процесс пойдет вразнос, пока стек не переполнится. Поэтому обязательно
запрещать таймер при входе, даже если ты уверен, что такого не будет.


 
Anatoly Podgoretsky ©   (2010-07-15 10:10) [91]

> Leonid Troyanovsky  (15.07.2010 09:58:28)  [88]

А где у тебя обработка событий? Без нее не получится


 
brother ©   (2010-07-15 10:16) [92]

> у тебя есть ProcessMessages, который может получить
> следующий тик таймера,

procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
begin
if Work then
  Exit
else
  Work:= True;

ListBox1.Items.Clear;
for i:= 1 to High(IpList) do
begin
  IdIcmpClient1.Host:= IpList[i];
  IdIcmpClient1.Ping();
  ListBox1.Items.Add("10.1.1. " + inttostr(i) + " :" +  inttostr(IdIcmpClient1.ReplyStatus.MsRoundTripTime)+"ms");
  Application.ProcessMessages; те тут вероятен вызов таймера еще раз? если да, то в начале выхзова мы его прекратим выходом из Timer1Timer!?
  if not Work then
    Break;
end;
Work:= False;
end;


 
Leonid Troyanovsky ©   (2010-07-15 11:06) [93]


> Anatoly Podgoretsky ©   (15.07.10 10:10) [91]

> А где у тебя обработка событий? Без нее не получится

Yes! Получил-таки AV:

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i, j : Longint;
begin
 for i := 0 to 100 do
   begin
     for j := 0 to 100000  do
       canvas.TextOut(0, 0, IntTostr(j));
     // OutputDebugString(PChar( IntTostr(GetQueueStatus(QS_TIMER))));
     Application.ProcessMessages;
   end;
end;

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-07-15 11:51) [94]


> brother ©   (15.07.10 10:16) [92]

>   Application.ProcessMessages; те тут вероятен вызов таймера
> еще раз? если да, то в начале выхзова мы его прекратим выходом
> из Timer1Timer!?

Зачем рисковать.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2010-07-15 13:25) [95]

> Leonid Troyanovsky  (15.07.2010 11:06:33)  [93]

Леонид тебе надо много тренироваться, но когда нибудь получишь stack
overflow
Короче если не запрещать таймер в начале процедуры, то это всегда игра в
русскую рулетку.


 
Anatoly Podgoretsky ©   (2010-07-15 13:26) [96]

> Leonid Troyanovsky  (15.07.2010 11:51:34)  [94]

Это ему только кажется что он сможет прекратить, на самом деле будет
запущена новая копия и так возможно до бесконечности.
Я не понимаю зачес спорить с очевидным?


 
Leonid Troyanovsky ©   (2010-07-15 13:44) [97]


> Anatoly Podgoretsky ©   (15.07.10 13:25) [95]

> Леонид тебе надо много тренироваться, но когда нибудь получишь

Он постарается (c)
:)

--
Regards, LVT.



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.006 c
6-1226681305
Netter
2008-11-14 19:48
2010.10.10
Скачивание файла


2-1279379714
PinDOS
2010-07-17 19:15
2010.10.10
Ограничение доступных свойств и методов объекта


6-1225988097
vegarulez
2008-11-06 19:14
2010.10.10
Вопрос про POST


2-1279537002
GanibalLector
2010-07-19 14:56
2010.10.10
Артефакты HINT а


3-1246013703
zerohold
2009-06-26 14:55
2010.10.10
Delphi connect to MySQL через SSH





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский