Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2010, 00:49   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию У N одновременно запущенных потоков приходит N события с одними и теми же параметрами

Как только не создавал я эти потоки... Результат один и тот же...
Снизу две картинки. Во втором посте код потока.
Желающим помочь (или готовым помочь) могу скинуть исходник. Аська 494 101 230

Добавлено:
В ListBox информация заносится через критические секции
Изображения
Тип файла: png Снимок.PNG (38.9 Кб, 75 просмотров)
Тип файла: png Снимок2.PNG (34.8 Кб, 71 просмотров)

Последний раз редактировалось TwiX; 19.02.2010 в 00:53.
TwiX вне форума Ответить с цитированием
Старый 19.02.2010, 00:49   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Код:
unit untProxyChecker;

interface

uses Classes, IdIcmpClient, IdComponent, Windows, extCtrls, sysUtils;

type
  TReplyPing = procedure(Sender: TObject; const ping: integer) of object;

type
  TProxyChecker=class(TThread)
  private
    _ip: string;
    _port: integer;
    icmp: TIdIcmpClient;
    status: String;
    timeout: Integer;
    FPingReply: TReplyPing;

    procedure OnReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
    procedure Execute; override;
  public
    property ip: string read _ip;
    property port: integer read _port;
    property onPing: TReplyPing read FPingReply write FPingReply;
    constructor Create(ip: string; port: Integer; timeout: Integer; suspended: boolean = false);
  end;

implementation

constructor TProxyChecker.Create(ip: string; port: Integer; timeout: Integer; suspended: boolean);
begin
  _ip:=ip;
  _port:=port;
  Self.timeout:=timeout;
  FreeOnTerminate:=true;

  inherited Create(suspended);
end;

procedure TProxyChecker.Execute;
begin
  icmp:=TIdIcmpClient.Create();

  icmp.Host:=_ip;
  icmp.Port:=_port;
  icmp.ReceiveTimeout:=timeout;

  icmp.OnReply:=onReply;

  icmp.Ping();

  //while not Terminated do
   // Sleep(50);
end;



procedure TProxyChecker.OnReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
var
  ms: integer;
begin
  if AReplyStatus.MsRoundTripTime>=timeout then
    ms:=0
  else
    ms:=AReplyStatus.MsRoundTripTime;

  if assigned(FPingReply) then
    FPingReply(self, ms);
end;

end.

Вот например, если аналогичный проект, то результат будет такой же:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure OnPin(Sender: TObject; const ping: integer);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses untProxyChecker;

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b: TProxyChecker;
begin
  a:=TProxyChecker.Create('80.191.89.68', 80, 1000);
  b:=TProxyChecker.Create('189.23.20.8', 8080, 1000);

  a.onPing:=onPin;
  b.onPing:=onPin;

end;

procedure TForm1.OnPin(Sender: TObject; const ping: Integer);
begin
  ListBox1.Items.Add(TProxyChecker(Sender).ip+' '+IntToStr(ping));
end;

end.

Последний раз редактировалось TwiX; 19.02.2010 в 00:59.
TwiX вне форума Ответить с цитированием
Старый 19.02.2010, 17:44   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ааааааааааап
TwiX вне форума Ответить с цитированием
Старый 20.02.2010, 21:17   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

И правда никто не знает, что за прикол?
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет отправки сообщения с одними пробелами POPOV PHP 7 31.08.2009 16:04
Экспорт в word из RichEdit с теми же настройками font Polotenchik Общие вопросы Delphi 4 06.07.2009 17:13
Проверка количества запущенных экземпляров приложения yulia Общие вопросы Delphi 3 07.10.2008 02:30
E-mail почта не работает несколько дней, а спам приходит Alar Свободное общение 3 29.01.2008 16:54
Беда не приходит одна! Tayfun Свободное общение 6 30.12.2007 07:58