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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.051 c
1-1183635629
Tack
2007-07-05 15:40
2007.09.16
Как при открытии TOpenDialog задать формат отображения файлов?


15-1187354195
@!!ex
2007-08-17 16:36
2007.09.16
Подскажите софт.


15-1187590549
vajo
2007-08-20 10:15
2007.09.16
20 самых бестолковых возможностей Windows за все время ее существ


2-1187604955
JetuS
2007-08-20 14:15
2007.09.16
Как получить имя и класс компонента, имеющего фокус?


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





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