Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Man_Without_Face



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

procedure OnReceivePacket(FromHostIP: Uint64; ReceiveData: pointer; ReceiveDataLength: cardinal;
                              ResponseData: pByte; ResponseDataLength: pCardinal);
var RD: pointer;
begin
  getmem(RD, sizeof(ReceiveData^));
  move(ReceiveData^, RD^, sizeof(ReceiveData^));
  NewThread(FromHostIP, RD, ReceiveDataLength); //тут создаю поток
end;
-------------------------------------
procedure NewThread(FromHostIP: Uint64; ReceiveData: pointer; ReceiveDataLength: cardinal);
var
  CreateNewThread: TNewThread;                //новый поток
begin
  CreateNewThread := TNewThread.Create(true); //создание
  CreateNewThread.FreeOnTerminate := true;    //уничтожение
  CreateNewThread.Priority := tpNormal;       //приоритет
  CreateNewThread.Resume;                     //запуск
  //Передача параметров
  CreateNewThread.FromHostIP := FromHostIP;
  move(ReceiveData^, CreateNewThread.ReceiveData^, sizeof(ReceiveData^));
  CreateNewThread.ReceiveDataLength := ReceiveDataLength;
end;
----------------------------------------
procedure TNewThread.Execute;
var
  ppUin: cardinal;
  pNum:  byte;
  vData: PPing2;
begin
  CriticalSection.Enter;
  Move(ReceiveData^, ppUin, 4);
  WriteLog('Универсальный идентификатор - ' + inttostr(ppUin));
  if ppUin = 11111111 then
    begin
      //inc(cardinal(ReceiveData), 4);
      //Move(ReceiveData, pNum, 1);
      //WriteLog('Код команды - '+inttostr(pNum));
      pNum := 1;
      case pNum of
        1:try
            WriteLog('Пинг от:');
            new(vData);
            move(ReceiveData^, vData^, sizeof(ReceiveData^));
            WriteLog('Центр '+ inttostr(vData^.MyCenter));
            WriteLog('Объект '+ inttostr(vData^.MyObject));
            WriteLog('Ip '+ inttostr(FromHostIP));
          finally
            Dispose(vData);
          end;
      end;
    end;
  dispose(ReceiveData);
  CriticalSection.Leave;
end;
-------------------------------------
    TPing2 = record
      Uin: cardinal;          // уникальный идентификатор
      Num: byte;              // номер команды
      Code: byte;             // код команды
      MyCenter: Word;
      MyObject: Word;
--------------------------------------
  type
    TNewThread = class(TThread)
      public
        { Private declarations }
      protected
        FromHostIP: Uint64;
        ReceiveData: pointer;
        ReceiveDataLength: cardinal;
        procedure Execute; override;
      end;

Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:14 07-04-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru