Проблема с динамическими массивами в Делфях
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Проблема с динамическими массивами в Делфях - 2007-04-08 09:38:55.430000
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
Дарова народ! Я тут пишу на Делфях программку и столкнулся вот с такой проблемкой: участок кода выглядит так: var stopx:boolean; procedure TForm1.STARTClick(Sender: TObject); type Tmy: array of тип; var массив:TMy; begin stopx:=false; SetLength[массив,длина]; for i:=1 to delta do begin if stopx then begin break; {тут еще несколько операторов} end; {тут парочка вложенных циклов} end; end; procedure TForm1.STOPClick(Sender: TObject); begin stopx:=true end; В общем как то так. Мне требовалось, чтобы при нажатии кнопки СТОП, циклы (запущеные кнопкой СТАРТ прерывались). Для этого я как видно ввел логическую переменную, которая при нажатии кнопки принимала значение true и цикл вскоре прерывался. Но я ловилю сообщение об ошибке. Помогите, как тут поступить (с простыми, нединамическими массивами все работало нормально). Блин я лузер =(8|
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:01:48.326666
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Так не понятно же, что ты внутри цикла делаешь с массивом И работет -ли код когда не жмешь на кнопку?
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:20:57.180000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
Блин я лузер =( Заметно .. ты бы хоть код полностью выложил, а то куй поймеш че у тя там
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:38:35.310000
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
Ну вот, хотел как проще, получилось как всегда )). Вот код procedure TForm1.STARTClick(Sender: TObject);
type
TFocket = array of TSOCKET;
Tbusy = array of boolean;
Tport = array of integer;
var
i,j,s, opt, index: Integer;
FSocket: TFocket;
busy : TBusy;
port : TPort;
addr : TSockAddr;
hEvent : THandle;
fset : TFDset;
tv : TTimeval;
tec :PServEnt;
PName:String;
GInitData : TWSADATA;
begin
STOP.Enabled:=true;
stopx:=false;
Animate1.Active:=true;
START.Enabled:= false;
ProgressBar1.Min:=StrToInt(p1.Text);
ProgressBar1.Max:=StrToInt(p2.Text);
SetLength(FSocket,StrToInt(Edit1.Text));
SetLength(busy,StrToInt(Edit1.Text));
SetLength(port,StrToInt(Edit1.Text));
WSAStartup(MAKEWORD(2,0), GInitData);
i:=StrToInt(p1.Text);
addr.sin_family := AF_INET;
addr.sin_addr.s_addr := INADDR_ANY;
addr.sin_addr := LookupName;
index:=StrToInt(Edit1.Text);
hEvent := WSACreateEvent();
while i<StrToInt(p2.Text) do
begin
for j:=0 to index do
busy[j]:=false;
if stopx then
begin
FSocket:=nil;
busy:=nil;
port:=nil;
break;
ProgressBar1.Position:=0;
START.Enabled:=true;
Animate1.Active:=false;
end;
for j:=0 to index do
begin
if i>StrToInt(p2.Text) then
begin
index:=j-1;
break;
end;
FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT);
addr.sin_port := htons(i);
connect(FSocket[j], @addr, sizeof(addr));
Application.ProcessMessages;
if WSAGetLastError()=WSAEINPROGRESS then
begin
closesocket (FSocket[j]);
busy[j]:=true;
end;
port[j]:=i;
Inc(i);
end;
FD_Zero(fset);
for j := 0 to index do
begin
if busy[j] <> true then
FD_SET (FSocket[j], fset);
end;
Application.ProcessMessages;
tv.tv_sec := 1;
tv.tv_usec := 0;
s:=select (1, nil, @fset, nil, @tv);
Application.ProcessMessages;
for j := 0 to index do
begin
if busy[j] then continue;
if FD_ISSET (FSocket[j], fset) then
begin
s:=Sizeof(Opt);
opt:=1;
getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s);
if opt=0 then
begin
tec := getservbyport(htons(Port[j]),'TCP');
if tec=nil then
PName:='Unknown'
else
begin
PName:=tec.s_name;
end;
Rich.Lines.Add('Port: '+IntToStr(Port[j])+' | '+Pname+' | '+'open');
end;
end;
closesocket(FSocket[j]);
end;
ProgressBar1.Position:=i;
end;
WSACloseEvent(hEvent);
Animate1.Active:=false;
ProgressBar1.Position:=0;
START.Enabled:= true;
end;
procedure TForm1.STOPClick(Sender: TObject);
begin
STOP.Enabled:=false;
stopx:=true
end;
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:48:20.236666
|
|
|
NEFFboy
Сообщений: 204
Оценки: 0
Присоединился: 2007-03-18 11:11:02.040000
|
что бы небыло ошибки, можешь заключить код в обработчик
try
execpt
end
а вообще не отлавливать исключения - есть дурной тон.
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 10:59:43.240000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
хех, quote:
while (i<StrToInt(p2.Text)) and (not stopx) do
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:02:13.430000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
FSocket:=nil; busy:=nil; port:=nil; break; фтопку
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:28:04.486666
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
quote:
FSocket:=nil; busy:=nil; port:=nil; break; Хм.. А это как сюды попало?
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:35:47.800000
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
ORIGINAL: Apache quote:
FSocket:=nil; busy:=nil; port:=nil; break; Хм.. А это как сюды попало? Тебе виднее :) из за этого и ошибка вылетала
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:41:57.070000
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
Неа это я потом добавлял, не из за ентого
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 11:42:45.396666
|
|
|
NightmareZz
Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
|
Ужос. Не понимаю, как можно писать говнокод, в котором потом сам не можешь разобраться.
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 18:36:07.900000
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
Учись Разобраться то могу!
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 18:38:01.966666
|
|
|
Apache
Сообщений: 153
Оценки: 0
Присоединился: 2006-10-13 10:02:03.070000
|
Млин ругать каждый может, а вот подсказать….
|
|
|
RE: Проблема с динамическими массивами в Делфях - 2007-04-08 22:58:51.783333
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Ну, а трасса что говорит?
|
|
|
|
|