Форум: "Начинающим";
Текущий архив: 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