Главная страница
    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.008 c
15-1278909803
12
2010-07-12 08:43
2010.10.10
В MSSQL есть SoundEx(str), есть ли такое для Delphi?


2-1279431185
Study
2010-07-18 09:33
2010.10.10
Работа с файлами концигурации


2-1279193322
Aleks
2010-07-15 15:28
2010.10.10
Экспорт ListView в эксель


2-1279003263
И. Павел
2010-07-13 10:41
2010.10.10
RecordCount и все, что с ним связано


2-1279206478
AKE
2010-07-15 19:07
2010.10.10
TBitmap и StreamReadError





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