Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не рабатают потоки, TThread 
:(
    Опции темы
DeSx86
Дата 17.3.2013, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.3.2013

Репутация: нет
Всего: нет



Подскажите пожалуйста почему не работают потоки? При нажатии на кнопку как-будто ничего не происходит.
Код

  TNewThread = class(TThread)
  private
    IPaddr : string;
    IPport : string;
    Rez : integer;
  protected
    procedure Execute; override;
  public
   procedure Sync;
//    constructor Create(CreateSuspended: Boolean);
  end;


var
  Form2 : TForm2;
  TA  : integer;
  Thread,Acc  : integer;
  Work:boolean;
  CS:TcriticalSection;
  startIP,konIP,rezIP:integer;
  ip:string;
implementation

{$R *.dfm}
uses Unit1;

//Функция сканирования 
function scan(ip:string;port,tm:integer):boolean;
var sock:TSocket;
    timeout:TTimeVal;
    addr:sockaddr_in;
    fds:TFDSet;
    block:u_long;
begin
Result:=false;
sock:=socket(AF_INET, SOCK_STREAM, 0);
if sock=INVALID_SOCKET then exit;
addr.sin_family:=AF_INET;
addr.sin_addr.S_addr:=inet_addr(pchar(ip));
addr.sin_port:=htons(port);
block:=1;
if ioctlsocket(sock, FIONBIO, block)<>0 then
                                        begin
                                        closesocket(sock);
                                        exit;
                                        end;
if connect(sock,@addr,sizeof(addr))=0 then
                                      begin
                                      Result:=true;
                                      closesocket(sock);
                                      exit;
                                      end;
if WSAGetLastError=WSAEWOULDBLOCK then
      begin
      FD_ZERO(fds);
      FD_SET(sock,fds);
      timeout.tv_sec:=tm;
      timeout.tv_usec:=0;
      end else
          begin
          closesocket(sock);
          exit;
          end;
if select(0, nil, @fds, nil, @timeout)=1 then Result:=true;
closesocket(sock);
end;




procedure TForm2.Button1Click(Sender: TObject);

begin
  begin //Вычисление количества ip для сканирования
    startIP:=( (strtoint(Edit7.Text)*256*256*256)+(strtoint(Edit5.Text)*256*256)+(strtoint(Edit3.Text)*256)+(strtoint(Edit1.Text)));
    konIP:=( (strtoint(Edit8.Text)*256*256*256)+(strtoint(Edit6.Text)*256*256)+(strtoint(Edit4.Text)*256)+(strtoint(Edit2.Text)));
    rezIP:=konIP-startIP;
  end;
Acc:=-1;
// Создание потоков
    TA:=StrToInt(Edit10.Text);
        for Thread:=1 to StrToINt(Edit11.Text) do TNewThread.Create(false);
        Thread:=StrToInt(Edit11.Text);
end;




procedure TNewThread.Execute;
var
  i,j,h,c : integer;
  CurAcc  : integer;

begin
  while Work do
                  CS.Enter;
                    Inc(Acc);
                    if Acc<rezIP then CurAcc:=Acc else Work:=false;
                  CS.Leave;
                  if Work then
     if
       ((Form2.Edit1.Text='') or   (Form2.Edit2.Text='') or  (Form2.Edit3.Text='') or  (Form2.Edit4.Text='') or  (Form2.Edit5.Text='') or  (Form2.Edit6.Text='') or  (Form2.Edit7.Text='') or  (Form2.Edit8.Text=''))
     then
     begin
        showmessage('Есть не заполненные поля!');
        exit;
     end;

  for h:=StrToInt(Form2.Edit7.Text) to StrToInt(Form2.Edit8.Text) do
      for c:=StrToInt(Form2.Edit5.Text) to StrToInt(Form2.Edit6.Text) do
          for j:=StrToInt(Form2.Edit3.Text) to StrToInt(Form2.Edit4.Text) do
              for i:=StrToInt(Form2.Edit1.Text) to StrToInt(Form2.Edit2.Text) do
                begin


                  ip:=(IntToStr(h)+'.'+IntToStr(c)+'.'+IntToStr(j)+'.'+IntToStr(i));
                  Form2.StatusBar1.Panels[0].Text:=ip;
                  Form2.StatusBar1.Panels[1].Text:=inttostr(Acc)+'/'+inttostr(rezIP);
                    try
                    scan(ip,strtoint(Form2.Edit9.Text),1);    //<> true then Form2.Memo1.Lines.Add(ip+':'+Form2.Edit9.Text)
                    Rez:=-1;
                    except
                     if scan(ip,strtoint(Form2.Edit9.Text),1) = true then
                      Rez:=1
                     else
                      Rez:=0
                    end;
             Synchronize(Sync);
         end;
  end;




procedure TNewThread.Sync;
begin
  case Rez of
    0:begin
        Form2.Memo2.Lines.Add('Error!');
      end;
    1:begin
      Form2.Memo1.Lines.Add(ip+':'+Form2.Edit9.Text);
      end;
    -1:begin
      Form2.Memo2.Lines.Add(ip+':'+Form2.Edit9.Text);
      end;
   end;
end;



procedure TForm2.Button2Click(Sender: TObject);
  begin
 Form2.Memo1.Clear;
 Form2.Memo2.Clear;
  end;

procedure TForm2.Button3Click(Sender: TObject);
begin
Form1.Memo1.Lines:=Form2.Memo1.Lines;
end;

end.

PM MAIL   Вверх
Illusion Dolphin
Дата 17.3.2013, 21:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



1) Настоятельно рекомендую http://forum.vingrad.ru/forum/topic-60076.html хотя бы прочитать
2) Всё отформатировать. Ещё более настоятельно рекомендую http://www.gunsmoker.ru/2011/01/blog-post.html
3) Вроде как надо основы отладки http://www.gunsmoker.ru/2012/02/5.html или гуглить
4) Я просмотрел наза 4 ничего не понял, но потоки должны стартавать, правда работать если будет, то с глюками, читать #1
5) Если что-то не работает - скажите, что именно, это познаётся через #3


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.