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; |