Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
Внизпомогите с пингом Найти похожие ветки
← →
linuxoid (2010-07-12 13:05) [0]Здравствуйте.
имеется таблица в базе с ip-адресами. нужно поочередно всех пропинговать.
tablebase.Open;
tablebase.First;
for i:=1 to tablebase.recordcount do begin
adres:=tablebase.fields.Fields[2].AsString;
icmp.Host:=adres;
icmp.Ping();
listbox1.Items.Add("Время до хоста: "+" - "+inttostr(icmp.ReplyStatus.MsRoundTripTime)+"ms")
tablebase.Next;
скажите в чем проблема?
← →
Dennis I. Komarov © (2010-07-12 13:19) [1]На сосне висят два банана.
скажите в чем проблема?
← →
Anatoly Podgoretsky © (2010-07-12 13:28) [2]> linuxoid (12.07.2010 13:05:00) [0]
А у тебя есть проблема?
← →
linuxoid (2010-07-12 13:29) [3]не перебирает по строкам.
← →
linuxoid (2010-07-12 13:33) [4]точнее зависает при поочередном переборе
← →
Anatoly Podgoretsky © (2010-07-12 13:42) [5]используй while not eof
← →
linuxoid (2010-07-12 13:48) [6]хотелось бы чтоб она как пропингует один хост и сразу же добавил б отчет в листбокс. а вместо этого она пингует все хосты потом тока добавляет все отчеты в листбокс.
← →
Юрий Зотов © (2010-07-12 13:52) [7]
> linuxoid (12.07.10 13:48) [6]
1. Есть begin, а где end к нему? Похоже, не в том месте, где надо.
2. Не используйте RecordCount. См. [5].
← →
Медвежонок Пятачок © (2010-07-12 13:54) [8]хотелось бы чтоб она как пропингует один хост и сразу же добавил б отчет в листбокс.
"она" в приведенном коде именно так и делает.
← →
Anatoly Podgoretsky © (2010-07-12 13:56) [9]
> хотелось бы чтоб она как пропингует один хост и сразу же
> добавил б отчет в листбокс. а вместо этого она пингует
> все хосты потом тока добавляет все отчеты в листбокс.
Онад добавляет в отчет строку за строкой, просто ты не обрабатываешь сообщения и тебе кажется, что потом.
← →
Anatoly Podgoretsky © (2010-07-12 13:57) [10]Свидетель постоянно путал показания.
← →
linuxoid (2010-07-12 14:00) [11]end есть. забыл дописать.
tablebase.Open;
tablebase.First;
for i:=1 to tablebase.recordcount do begin
adres:=tablebase.fields.Fields[2].AsString;
icmp.Host:=adres;
icmp.Ping();
listbox1.Items.Add("Время до хоста: "+" - "+inttostr(icmp.ReplyStatus.MsRoundTripTime)+"ms")
tablebase.Next;
end;
если же в базу много хостов, то программа просто зависает.
когда использовал массив adres[i] программа поочередно пинговала хосты и добавляла в листбокс. а вот с базой проблемы.
← →
Dennis I. Komarov © (2010-07-12 14:03) [12]ProcessMessages; И куда бы ее поставить???
← →
linuxoid (2010-07-12 14:05) [13]ну и как это можно решить?
я с ProcessMessages; не работал
← →
12 © (2010-07-12 14:06) [14]ассинхронный режим
← →
Dennis I. Komarov © (2010-07-12 14:18) [15]
> 12 © (12.07.10 14:06) [14]
Воробьев не жалко?
← →
Dennis I. Komarov © (2010-07-12 14:20) [16]
> linuxoid (12.07.10 13:48) [6]
А зачем?
← →
linuxoid (2010-07-12 14:25) [17]нужен наилучший вариант кода который проверит на наличие доступности хоста в сети.
← →
Anatoly Podgoretsky © (2010-07-12 14:27) [18]> linuxoid (12.07.2010 14:05:13) [13]
Ну тогда зачем вешаешь лапшу на уши, что с листбоксом у тебя работало.
← →
Dennis I. Komarov © (2010-07-12 14:29) [19]
> нужен наилучший вариант кода который проверит на наличие
> доступности хоста в сети.
Что есть "доступность хоста"? Отлуп пинга еще ни о чем не говорит. Даже если получил ответ, далеко не факт, что через 5 сек. ты не получишь отлуп.
В чем сокровенный смысл сей операции?
← →
linuxoid (2010-07-12 14:32) [20]в листбоксе токо пишется отчет. прежнии код рабочии тока када много хостов она тупо зависает.
нужна альтернатива, чтоб поочередно перебирала из базы по одному хосту и добавляла в листбокс отчет- доступен ли в сети хост или нет
← →
Dennis I. Komarov © (2010-07-12 14:36) [21]
> прежнии код рабочии тока када много хостов она тупо зависает
он не туто записает, он тупо работает...
> отчет- доступен ли в сети хост или нет
Ну на какого он нужен?
← →
linuxoid (2010-07-12 14:38) [22]цель. проверит на наличие доступности в сети хостов.
ip адреса хостов находятся в базе.
нужно путем пинга определить доступен ли хост или нет.
и сразу же отчет добавлять в листбокс.
например.
192.168.0.1 - 0ms
или
192.168.0.2 - N/A.
← →
Dennis I. Komarov © (2010-07-12 14:42) [23]
> путем пинга определить доступен ли хост или нет
С какого?
> например.
> 192.168.0.1 - 0ms
а через секунду уже N/A. И чего?
З.Ы. Про X, Y, Z КУ?
← →
Anatoly Podgoretsky © (2010-07-12 14:45) [24]> linuxoid (12.07.2010 14:25:17) [17]
Да ты справься сначала с простым, с наилучшим ты утонешь.
← →
linuxoid (2010-07-12 14:48) [25]главное просканировать сеть.
вся эта процедура я закинул в timer с интервалов 30 секунд.
так что через каждые 30 секунд она будет сканировать сеть.
если какой нить хост не доступен я уже буду знать
пытаюсь сделать аналог fpingera
← →
Anatoly Podgoretsky © (2010-07-12 14:49) [26]> linuxoid (12.07.2010 14:38:22) [22]
Это не цель, а описание действий, цель например наказать тех, кто не
окажется в списке.
← →
Anatoly Podgoretsky © (2010-07-12 14:50) [27]
> linuxoid (12.07.10 14:48) [25]
Готовься к зависанию программы и переполнению стека.
← →
linuxoid (2010-07-12 14:52) [28]
> Готовься к зависанию программы и переполнению стека.
ну и как это избежать?
← →
Dennis I. Komarov © (2010-07-12 14:59) [29]
> вся эта процедура я закинул в timer с интервалов 30 секунд.
> так что через каждые 30 секунд она будет сканировать сеть.
Все, мы пропали...
> ну и как это избежать?
Так на кой ляд оно надо?
← →
12 © (2010-07-12 15:01) [30]да ладно, зато запустил и забыл
Когда админом в магазине работал, писал, все пинговалось и ругалось, если кто молчит в течении 2-3 минут
там чудненькие интерфейсы были - если пинга не было больше минут 5ти, девайс вылетал, причем при восстановлении пинга он не работал уже,
т.к. где то во вшитой в себя софтине уже никогда не определял что ping пошел.
Ты его пингуешь, он на уровне интерфейса бодренький, а команды игнорирует.
только выкл/вкл + рестарт службы на сервере, вот для того прожку и писал, там (SpeachAPI) еще он говорил мне куда идти :)
ща исходники искал, но не нашел. Наверное забыл про нее, когда уходил.
ассинхронно писал, помню
на получение ответа - взведение флага
по таймеру, если флаг взведен, - опять пинг.
← →
linuxoid (2010-07-12 15:02) [31]
> Так на кой ляд оно надо?
пытаюсь сделать аналог программы Friendly Pinger.
← →
Dennis I. Komarov © (2010-07-12 15:09) [32]
> 12 © (12.07.10 15:01) [30]
там чудненькие интерфейсы были - если пинга не было больше минут 5ти, девайс вылетал, причем при восстановлении пинга он не работал уже,
т.к. где то во вшитой в себя софтине уже никогда не определял что ping пошел.
Вот видишь чего бывает от таких софтоваяниев...
> linuxoid (12.07.10 15:02) [31]
>
> > Так на кой ляд оно надо?
>
>
> пытаюсь сделать аналог программы Friendly Pinger.
Как со стенкой... См. [26]
← →
linuxoid (2010-07-12 15:18) [33]
> Как со стенкой... См. [26]
не понял вопрос
← →
Dennis I. Komarov © (2010-07-12 15:27) [34]
> цель. проверит на наличие доступности в сети хостов.
Зачем?
> главное просканировать сеть.
> пытаюсь сделать аналог fpingera
Зачем?
> пытаюсь сделать аналог программы Friendly Pinger.
...
← →
Anatoly Podgoretsky © (2010-07-12 15:31) [35]
> не понял вопрос
Вопрос простой, зачем [26]
← →
linuxoid (2010-07-12 15:34) [36]следить за работой сети. знать время их отключения если таковы были. короче контролировать сеть
← →
Dennis I. Komarov © (2010-07-12 15:46) [37]нет ответа от пинга хоста - пошел, пнул, заработало... Так что ли? Это есть контроль? Не трогайте ее и она Вас не будет. А если у кого какой хост отвалится, то бдительные юзверы Вам об этом скажут быстрее, чем супер-пупер прога... :)
← →
linuxoid (2010-07-12 15:56) [38]но мне нужно это супер-пупер прогу написать. тут хостами могуть быть не только компьютеры, но и управляемые свичи находящиеся удаленно от меня
← →
Anatoly Podgoretsky © (2010-07-12 15:58) [39]> linuxoid (12.07.2010 15:34:36) [36]
Кто же сеть с помощью пинга контролирует,
← →
linuxoid (2010-07-12 16:00) [40]контроль всмысле - быть осведомленным что происходит в сети. знать какие хосты в какое время отключались
← →
Dennis I. Komarov © (2010-07-12 16:19) [41]
> но и управляемые свичи находящиеся удаленно от меня
тем более...
← →
linuxoid (2010-07-12 16:27) [42]возвращаюсь к исходному вопросу. Как бы мне все это реализовать?
← →
faiwer © (2010-07-12 17:35) [43]Вот так:
tablebase.Open;
tablebase.First;
for i:=1 to tablebase.recordcount do begin
adres:=tablebase.fields.Fields[2].AsString;
icmp.Host:=adres;
icmp.Ping();
listbox1.Items.Add("Время до хоста: "+" - "+inttostr
(icmp.ReplyStatus.MsRoundTripTime)+"ms")
Application.ProcessMessages;
tablebase.Next;
end;
Местные тебе весь мозг съедят. А я так понял - тебе прога нужна чисто временно чтобы не бегать и не напрягаться, врядли тебе изза этого захочется познавать дзен сетей и делфей )
← →
Leonid Troyanovsky © (2010-07-12 20:42) [44]
> faiwer © (12.07.10 17:35) [43]
> нужна чисто временно чтобы не бегать и не напрягаться
Где ж он временно напрягся? Ну, или, побегал.
--
Regards, LVT.
← →
linuxoid (2010-07-13 08:40) [45]хосты удалены от меня. если какой нить из них не доступен, пойти и исправить. просто невозможно за всеми следить. лучше с одного места.
← →
brother © (2010-07-13 08:44) [46]сколько штук? а то: cmd с ping не подойдет?
← →
linuxoid (2010-07-13 08:44) [47]
> faiwer © (12.07.10 17:35) [43]
все равно зависает. поищу другой подход.
← →
brother © (2010-07-13 08:54) [48]Файл ping10.1.1.1.cmd :
ping 10.1.1.1 - t
не подойдет?
← →
linuxoid (2010-07-13 08:59) [49]
> brother © (13.07.10 08:54) [48]
неа.
см.(22).
← →
brother © (2010-07-13 09:15) [50][46] ?
← →
linuxoid (2010-07-13 09:30) [51]количество неограничено. оно увеличивается. и через cmd будет неудобно. а с программным интерфейсом гораздо удобнее.
← →
Dennis I. Komarov © (2010-07-13 09:33) [52]
> linuxoid (13.07.10 08:44) [47]
Что есть зависание в твоем понятии?
← →
linuxoid (2010-07-13 09:42) [53]
> Что есть зависание в твоем понятии?
после запуска программа стоит. все кнопки не активны. затем разом в листбокс добавляется отчет по нескольким хостам. через некоторое время еще по нескольким. выход даже на рабоает
← →
brother © (2010-07-13 09:49) [54][43] Application.ProcessMessages;
а не закрывается тк у тя цикл не закончился, делай принудительно выход из цикла
> for i:=1 to tablebase.recordcount do begin
← →
brother © (2010-07-13 09:53) [55]> а с программным интерфейсом гораздо удобнее.
А, так тебе шашечки? Значит не линуксоид ты)
← →
Anatoly Podgoretsky © (2010-07-13 10:04) [56]> linuxoid (13.07.2010 08:40:45) [45]
Тебе о проблемах соощат пользователи и вероятно, что пинг в этом случае
будет работать.
Это бессмысленная работа, точнее лишь бы не работать.
← →
Anatoly Podgoretsky © (2010-07-13 10:09) [57]
> 12 © (12.07.10 14:06) [14]
В Инди то?
← →
Anatoly Podgoretsky © (2010-07-13 10:11) [58]
> нужен наилучший вариант кода который проверит на наличие
> доступности хоста в сети.
Большинство файрволов имеют в составе verifier это штука помощнее, а не видимость проверки с пингом, что просто шоры на глаза. Иммитация работы.
← →
linuxoid (2010-07-13 10:12) [59]а что если все данные вначале занести в массив adres[i].
затем пинг делать перебирая значение массива.
постоянное обращение к базе влияет?
← →
Dennis I. Komarov © (2010-07-13 10:18) [60]
> постоянное обращение к базе влияет?
нет
← →
linuxoid (2010-07-13 10:21) [61]вот нашел аналог. хотелось бы такое. здесь просто задается диапазон ip.
а в моей они должны братся из базы.
http://www.delphisources.ru/pages/sources/internet/2007_year/ping_thread.html
← →
Dennis I. Komarov © (2010-07-13 10:23) [62]
> после запуска программа стоит. все кнопки не активны. затем
> разом в листбокс добавляется отчет по нескольким хостам.
> через некоторое время еще по нескольким. выход даже на
> рабоает
Ну так она работает, а не зависает. Чего ты ее дергаешь? Выноси пинг в отдельный поток если тебе кнопки жать хоца...
Правда, ИМХО, там грабель насобирашь...
← →
brother © (2010-07-13 10:26) [63]> Выноси пинг в отдельный поток если тебе кнопки жать хоца...
>
> Правда, ИМХО, там грабель насобирашь...
вот вот, я хотел посоветовать - потом передумал)
← →
brother © (2010-07-13 10:30) [64]кстати:
> нужно поочередно всех пропинговать.
в [54] иже с ним, так и делается, а не реакция - работает...)
← →
linuxoid (2010-07-13 10:40) [65]все равно во время пинга в проге моей даже окно нельзя перетаскивать. вписывать какие нить данные в эдиты и т д.
← →
faiwer © (2010-07-13 10:52) [66]linuxoid
1. я в твой код добавил Application.ProcessMessages - это гарантирует то, что твой ListBox будет пополнятся постепенно, а не разом после всех пингов
2. если ты хочешь чтобы не зависал интерфейс - тебе надо выносить сетевую часть в отдельный поток. Что то мне подсказывает, что после пары статей про потоки, ты передумаешь, и захочешь чтобы зависало дальше )
← →
faiwer © (2010-07-13 10:58) [67]Объясню по понятнее.
Твоя программа (я имею ввиду твои процедуры и функции) и её интерфейс работают в одном потоке. Если поток чем то занят, он чтото делает, то чтото другое он не делает. Поток не может делать сразу два дела в 1 момент времени. Поетому когда ты его нагружаешь пингами, он не может перерисовать ListBox, чтобы там повился новый элемент, и не может обработать твои нажатия на эдитки, кнопки и прочие вещи - ибо он "пингует", он всё ещё внутри цикла.
Application.ProcessMessages - временно выполняет скопившиеся задачи, то есть если листбокс хотел нарисовать новый элемент - он его нарисует, по окончанию списка задач, твоя программа вновь пингует. Поетому никакие едитки не пашут. Список обновился, но интерфейс так и остаётся деревянным. Потоку не до этого, он пингует.
Ты можешь вынести пинг-инг в отдельный поток, тогда ничерта зависать не будет, но во первых, тебе придётся прочитать 100500 статей, научится синхронизировать работу с тем же ListBox-ом, да и просто написать много костылей. Если ты чем то (для тебя) сложным в делфях уже занимался, то потоки на голову сложнее :)
P.S. сетевые программы, музыкальные программы даже небольшой сложности обязательно разграничены на 1-2-3...999 потоков )
← →
linuxoid (2010-07-13 11:08) [68]
> faiwer © (13.07.10 10:58) [67]
спс. теперь понял.
в этой проге -
http://www.delphisources.ru/pages/sources/internet/2007_year/ping_thread.html
можно делать несколько операции.
почему так нельзя сделать, или в этой проге используют нескоко потоков?
может дело в другом методе?
← →
faiwer © (2010-07-13 11:15) [69]
> почему так нельзя сделать, или в этой проге используют нескоко
> потоков?
> может дело в другом методе?
Дело в потоках, вот это:TThreadScan = class(TThread)
msg : string;
msg2 : string;
private
BeginAddr: integer;
EndAddr: integer;
Timeout: DWORD;
procedure UpdateMemo;
procedure UpdateStatusBar;
procedure UpdateScanned;
protected
procedure Execute; override;
public
constructor Create(a,b:integer);
end;
Отдельный поток.
← →
linuxoid (2010-07-13 11:17) [70]
>
> Отдельный поток.
спасибо. теперь постараюсь сам разобраться.
← →
brother © (2010-07-13 11:27) [71]Блин, ты без потоков бы попробовал разобраться!
Держи и смотри как...unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
IdIcmpClient1: TIdIcmpClient;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
public
Work: boolean;
IpList: array of string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
SetLength(IpList, 21);
for i:= 1 to High(IpList) do
IpList[i]:= "10.1.1." + IntToStr(i);
IdIcmpClient1.ReceiveTimeout:= 200;
Work:= False;
end;
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;
if not Work then
Break;
end;
Work:= False;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Work:= False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= not Timer1.Enabled;
end;
end.
← →
linuxoid (2010-07-13 12:48) [72]
> begin
> if Work then
> Exit
> else
> Work:= True;
вот эти не понятны что то?
← →
ixen (2010-07-13 15:20) [73]а постоянными пингами, не ухудшится ли обмен пакетами в сети?
← →
brother © (2010-07-14 04:59) [74]> вот эти не понятны что то?
если уже работаем, то заново не надо запускаться, пока не отработают текущие пинги...
> а постоянными пингами, не ухудшится ли обмен пакетами в
> сети?
имхо нагрузка не велика - нет
← →
brother © (2010-07-14 05:05) [75]> вот эти не понятны что то?
странно, но все остальное понятно??? Тогда - дерзай! Удачи!
← →
Anatoly Podgoretsky © (2010-07-14 10:05) [76]
> вот вот, я хотел посоветовать - потом передумал)
Пожалел :-)
← →
Anatoly Podgoretsky © (2010-07-14 10:06) [77]
> Application.ProcessMessages - временно выполняет скопившиеся
> задачи
Что неправда, никаких задач, кроме ProcessMessages он не выполняет
← →
Anatoly Podgoretsky © (2010-07-14 10:09) [78]
> procedure TForm1.Timer1Timer(Sender: TObject);
Это ты зря, ведешь его к stack overflow
← →
Anatoly Podgoretsky © (2010-07-14 10:10) [79]
> Anatoly Podgoretsky © (14.07.10 10:09) [78]
Эту функцию, если оставлять, то надо переписывать, чтобы не возникла указаная проблема.
← →
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.7 MB
Время: 0.007 c