Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Окно   Найти похожие ветки 

 
Bast   (2007-08-20 14:13) [0]

Здравствуйте! Когда начинается Цикл то окно программы подвисает как можно этого избежать?
Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
form1.TcpClient1.RemoteHost:=Edit1.Text;
for i:=StrToInt(Edit2.Text) to StrToInt(Edit3.Text) do
begin
TcpClient1.RemotePort:=IntToStr(i);
TcpClient1.Open;
form1.Label6.Caption:=Inttostr(i);
if TcpClient1.Connected then
Memo1.Lines.Add(IntToStr(i)+" Открыт");
TcpClient1.Close;
end;
end;

end.


 
THandle ©   (2007-08-20 14:19) [1]

Большие циклы лучше выносить в отдельный поток.


 
THandle ©   (2007-08-20 14:22) [2]

Большие циклы лучше выносить в отдельный поток.


 
Германн ©   (2007-08-20 14:23) [3]


> THandle ©   (20.08.07 14:19) [1]
>
> Большие циклы лучше выносить в отдельный поток.
>

Далеко не всегда нужны доппотоки. Во многих случаях достаточно вставить в цикл ProcessMessages. Гораздо более простое и надежное решение.


 
Bast   (2007-08-20 14:26) [4]


> Далеко не всегда нужны доппотоки. Во многих случаях достаточно
> вставить в цикл ProcessMessages. Гораздо более простое и
> надежное решение.

А куда вставить? неподскажите


 
Bast   (2007-08-20 14:29) [5]


> Далеко не всегда нужны доппотоки. Во многих случаях достаточно
> вставить в цикл ProcessMessages. Гораздо более простое и
> надежное решение.

Непомогло, если сканирую 127,0,0,1 то помогает а если допустим ya.ru то зависает


 
Германн ©   (2007-08-20 14:35) [6]


> Непомогло, если сканирую 127,0,0,1 то помогает а если допустим
> ya.ru то зависает
>

Тогда в доппотоки.
Или использовать асинхронный режим работы.


 
Bast   (2007-08-20 14:39) [7]

Можно пример какой нибудь?


 
Leonid Troyanovsky ©   (2007-08-20 14:51) [8]


> Bast   (20.08.07 14:39) [7]

> Можно пример какой нибудь?

Поищи у себя на компьютере chat.dpr

--
Regards, LVT.


 
Bast   (2007-08-20 15:01) [9]

ненашел


 
Leonid Troyanovsky ©   (2007-08-20 15:03) [10]


> Bast   (20.08.07 15:01) [9]

> ненашел

Примеры устанавливал?
Если нет, то вернись к дистрибутиву.

--
Regards, LVT.


 
DVM ©   (2007-08-20 15:04) [11]


> а если допустим ya.ru то зависает

нехорошо порты сканировать


 
Anatoly Podgoretsky ©   (2007-08-20 15:16) [12]


> нехорошо порты сканировать

Кто сказал?


 
DVM ©   (2007-08-20 15:20) [13]


> Кто сказал?

я


 
Anatoly Podgoretsky ©   (2007-08-20 15:21) [14]

И тебя кто то послушал?


 
DVM ©   (2007-08-20 15:23) [15]


> И тебя кто то послушал?

да


 
Anatoly Podgoretsky ©   (2007-08-20 15:23) [16]

> DVM  (20.08.2007 15:23:15)  [15]

Врешь, я постоянно сканирую, то что мне нужно.


 
DVM ©   (2007-08-20 15:26) [17]


> Врешь, я постоянно сканирую, то что мне нужно.

а я то думаю, кто постоянно сканирует


 
Bast   (2007-08-20 15:28) [18]

Подскажите как использовать потоки, а то я почитал http://www.megalib.com/books/26/gl03/index.htm#anc1
понял кое что, но не понял как их использовать


 
Anatoly Podgoretsky ©   (2007-08-20 16:36) [19]

> DVM  (20.08.2007 15:26:17)  [17]

Я бы сказал кто, но и сам не знаю.
Конечно если ты про адрес сервера, на котором хостится delphimaster.ru
Это очень охраняемая тайна хостеров.


 
Bast   (2007-08-20 17:07) [20]

Во многих япрогах я видел работать в n потоков, как мне сделать такую хрень, ведь мой сканер потртов работает ооочень медленно 1 порт в 1 сек (


 
DVM ©   (2007-08-20 17:14) [21]


> Bast   (20.08.07 17:07) [20]

ну и в чем проблема - создавай N потоков, в каждом из них (в теле метода Execute, если используется класс TThread) создавай динамически свой экземпляр клиентского сокета и пусть он коннектится к своему порту. Номер порта можно передать в поток при его создании в конструктор. При успешном коннекте поток должен как-то переадать в основной поток информацию об успехе (с пом сообщения или через Synchronize).  После завершения поток путь самоликвидируется (FreeOnTerminate := true).


 
DVM ©   (2007-08-20 17:26) [22]

Если же ты используешь асинхронные сокеты на сообщениях, то тебе не нужны потоки, наоборот - они вредны. В этом случе просто создавай динамически N экземпляров клиентского сокета на разных портах и жди соединения.


 
Bast   (2007-08-20 17:30) [23]

Проблема в том что я питаюсь использовать потоки но нихрена не получается, щас еще раз попробую и покажу что я делаю


 
Bast   (2007-08-20 17:34) [24]

unit Unit2;

interface

uses
 Classes;

type
 Potok = class(TThread)
 private
 i: integer;
   { Private declarations }
 protected
   procedure Execute; override;
 end;

implementation

{ Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,

     Synchronize(UpdateCaption);

 and UpdateCaption could look like,

   procedure Potok.UpdateCaption;
   begin
     Form1.Caption := "Updated in a thread";
   end; }

{ Potok }

procedure Potok.Execute;
begin
begin
form1.Button2.Cancel:=False;
form1.memo1.Clear;
form1.Memo2.Clear;
form1.TcpClient1.RemoteHost:=Edit1.Text;
form1.Label4.Visible:=True;
form1.Label5.Visible:=True;
form1.Label6.Visible:=True;
form1.Label7.Visible:=True;
for i:=StrToInt(Edit2.Text) to StrToInt(Edit3.Text) do
begin
If form1.Button2.Cancel then break;
Application.ProcessMessages();
TcpClient1.RemotePort:=IntToStr(i);
TcpClient1.Open;
form1.Label6.Caption:=Inttostr(i);
if TcpClient1.Connected then
begin
Application.ProcessMessages();
Memo1.Lines.Add(IntToStr(i)+" îòêðûò");
TcpClient1.Close;
end
else
begin
Application.ProcessMessages();
memo2.Visible:=True;
Memo2.Lines.Add(IntToStr(i)+" çàêðûò");
end;
end;
end;
end;

end.


Ошибки:
Build
 [Error] Unit2.pas(36): Undeclared identifier: "form1"
 [Error] Unit2.pas(36): Missing operator or semicolon
 [Error] Unit2.pas(37): Missing operator or semicolon
 [Error] Unit2.pas(38): Missing operator or semicolon
 [Error] Unit2.pas(39): Missing operator or semicolon
 [Error] Unit2.pas(39): Missing operator or semicolon
 [Error] Unit2.pas(39): Undeclared identifier: "Edit1"
 [Error] Unit2.pas(40): Missing operator or semicolon
 [Error] Unit2.pas(40): Missing operator or semicolon
 [Error] Unit2.pas(41): Missing operator or semicolon
 [Error] Unit2.pas(42): Missing operator or semicolon
 [Error] Unit2.pas(43): Missing operator or semicolon
 [Error] Unit2.pas(44): For loop control variable must be simple local variable
 [Error] Unit2.pas(44): Undeclared identifier: "Edit2"
 [Error] Unit2.pas(44): Undeclared identifier: "Edit3"
 [Error] Unit2.pas(46): "THEN" expected but identifier "Button2" found
 [Error] Unit2.pas(51): "THEN" expected but identifier "Connected" found
 [Error] Unit2.pas(53): Undeclared identifier: "Application"
 [Error] Unit2.pas(53): Missing operator or semicolon
 [Error] Unit2.pas(54): Missing operator or semicolon
 [Error] Unit2.pas(55): Missing operator or semicolon
 [Error] Unit2.pas(59): Missing operator or semicolon
 [Error] Unit2.pas(60): Missing operator or semicolon
 [Error] Unit2.pas(61): Missing operator or semicolon
 [Fatal Error] Project1.dpr(6): Could not compile used unit "C:\Program Files\Borland\Delphi7\Projects\Unit2.pas"


 
Bast   (2007-08-20 21:29) [25]


> ну и в чем проблема - создавай N потоков, в каждом из них
> (в теле метода Execute, если используется класс TThread)
> создавай динамически свой экземпляр клиентского сокета и
> пусть он коннектится к своему порту. Номер порта можно передать
> в поток при его создании в конструктор. При успешном коннекте
> поток должен как-то переадать в основной поток информацию
> об успехе (с пом сообщения или через Synchronize).  После
> завершения поток путь самоликвидируется (FreeOnTerminate
> := true).

Можно поподробнее?


 
DVM ©   (2007-08-21 10:29) [26]


> Bast   (20.08.07 17:34) [24]

Вау!!! Может для начала прочитать книжку?


> Можно поподробнее?

Куда уж подробнее? Код за тебя написать?


 
DevilDevil ©   (2007-08-21 10:40) [27]

так попроще должон быть:
http://maxim.int.ru/stuff/xaxaxakep/%e5%a0042/058/1.html


 
DVM ©   (2007-08-21 10:47) [28]


> DevilDevil ©

Фленов рулит


 
Bast   (2007-08-21 11:04) [29]

Спасибо за ссылку, сейчас почитаю


 
Bast   (2007-08-21 11:26) [30]

Почитал, жаль там нет исходников (



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

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.022 c
2-1187927020
Gydvin
2007-08-24 07:43
2007.09.16
Чтение wmf


15-1187477610
wp2
2007-08-19 02:53
2007.09.16
Может и тупой вопрос, но все же.


15-1187730447
Германн
2007-08-22 01:07
2007.09.16
Обидный пробел в функциональности IDE Delphi (Д6)


2-1188065215
hprx
2007-08-25 22:06
2007.09.16
Работа с графикой.


3-1179494173
SerMaxx
2007-05-18 17:16
2007.09.16
Работа компонента Table