![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окно
Bast © (2007-08-20 14:13:00)Здравствуйте! Когда начинается Цикл то окно программы подвисает как можно этого избежать?
Пример:
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.
Bast (2007-08-21 11:26:00) [1]Почитал, жаль там нет исходников (
Bast (2007-08-21 11:04:00) [2]Спасибо за ссылку, сейчас почитаю
DVM (2007-08-21 10:47:00) [3]
> DevilDevil ©
Фленов рулит
DevilDevil (2007-08-21 10:40:00) [4]так попроще должон быть:
http://maxim.int.ru/stuff/xaxaxakep/%e5%a0042/058/1.html
DVM (2007-08-21 10:29:00) [5]
> Bast (20.08.07 17:34) [24]
Вау!!! Может для начала прочитать книжку?
> Можно поподробнее?
Куда уж подробнее? Код за тебя написать?
Bast (2007-08-20 21:29:00) [6]
> ну и в чем проблема - создавай N потоков, в каждом из них
> (в теле метода Execute, если используется класс TThread)
> создавай динамически свой экземпляр клиентского сокета и
> пусть он коннектится к своему порту. Номер порта можно передать
> в поток при его создании в конструктор. При успешном коннекте
> поток должен как-то переадать в основной поток информацию
> об успехе (с пом сообщения или через Synchronize). После
> завершения поток путь самоликвидируется (FreeOnTerminate
> := true).
Можно поподробнее?
Bast (2007-08-20 17:34:00) [7]
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 17:30:00) [8]Проблема в том что я питаюсь использовать потоки но нихрена не получается, щас еще раз попробую и покажу что я делаю
DVM (2007-08-20 17:26:00) [9]Если же ты используешь асинхронные сокеты на сообщениях, то тебе не нужны потоки, наоборот - они вредны. В этом случе просто создавай динамически N экземпляров клиентского сокета на разных портах и жди соединения.
DVM (2007-08-20 17:14:00) [10]
> Bast (20.08.07 17:07) [20]
ну и в чем проблема - создавай N потоков, в каждом из них (в теле метода Execute, если используется класс TThread) создавай динамически свой экземпляр клиентского сокета и пусть он коннектится к своему порту. Номер порта можно передать в поток при его создании в конструктор. При успешном коннекте поток должен как-то переадать в основной поток информацию об успехе (с пом сообщения или через Synchronize). После завершения поток путь самоликвидируется (FreeOnTerminate := true).
Bast (2007-08-20 17:07:00) [11]Во многих япрогах я видел работать в n потоков, как мне сделать такую хрень, ведь мой сканер потртов работает ооочень медленно 1 порт в 1 сек (
Anatoly Podgoretsky (2007-08-20 16:36:00) [12]> DVM (20.08.2007 15:26:17) [17]
Я бы сказал кто, но и сам не знаю.
Конечно если ты про адрес сервера, на котором хостится delphimaster.ru
Это очень охраняемая тайна хостеров.
Bast (2007-08-20 15:28:00) [13]Подскажите как использовать потоки, а то я почитал http://www.megalib.com/books/26/gl03/index.htm#anc1
понял кое что, но не понял как их использовать
DVM (2007-08-20 15:26:00) [14]
> Врешь, я постоянно сканирую, то что мне нужно.
а я то думаю, кто постоянно сканирует
Anatoly Podgoretsky (2007-08-20 15:23:00) [15]> DVM (20.08.2007 15:23:15) [15]
Врешь, я постоянно сканирую, то что мне нужно.
DVM (2007-08-20 15:23:00) [16]
> И тебя кто то послушал?
да
Anatoly Podgoretsky (2007-08-20 15:21:00) [17]И тебя кто то послушал?
DVM (2007-08-20 15:20:00) [18]
> Кто сказал?
я
Anatoly Podgoretsky (2007-08-20 15:16:00) [19]
> нехорошо порты сканировать
Кто сказал?
DVM (2007-08-20 15:04:00) [20]
> а если допустим ya.ru то зависает
нехорошо порты сканировать