Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

(Berkeley-style sockets) теория


GanibalLector ©   (2006-01-21 18:37:00) 

Предположим сервер выполнил Accept для нового клиента и создал поток.Рано или поздно поток завершится и (по всем правилам) я должен выполнить CloseHandle. И как быть... создавать еще один поток,который будет отслеживать смерть потоков и  вызывать CloseHandle ???

И еще,предположим я хочу передать некоторую структуру в создаваемый поток. Делаю так :

type
 TMode=record
  Sock:Cardinal;
  Addr:TSockAddr;
 end;
 PMode = ^TMode;
...
var Val:PMode;
begin
 ...
 GetMem(Val,SizeOf(TMode));
 Val.Sock:=AcceptedSock;
 Val.Addr:=Addr;
 BeginThread(nil,0,@ProcessSockEvents,PMode(Val),0,ThId);
  //FreeMem(Val)

Опять таки,если не сделать FreeMem(Val),то  будет утечка.Если сделать,то будет еще большая беда. Как быть?


GanibalLector   (2006-01-21 19:33:00) [1]

2 GuAV ©   (21.01.06 19:08) [1]
Спасибо!
>при чём тут сабж и конференция Сети ?
Бывает ;)

И еще. Как известно ф-ции Send,Recv  имеют 3 параметра. Меня,собственно,интересует третий. Т.е флаг установленный в MSG_OOB. Изменится ли при этом скорость приема\передачи, если по пути следования пакета имеется некоторое оборудование(свичи,хабы). Более того,в некоторых литературных источниках и конференциях настоятельно рекомендуют ВОЗДЕРЖАТЬСЯ от использования MSG_OOB. Как быть?


GuAV   (2006-01-21 19:08:00) [2]


> Рано или поздно поток завершится и (по всем правилам)
> я должен выполнить CloseHandle.

CloseHandle чего ? потока ?  
Если тебе не нужен хендл потока, закрывай этот хендл сразу - делов... Типа CloseHandle(BeginThread( ...
Если где-то сохраняешь, то оттуда и закрывай.


>  
> BeginThread(nil,0,@ProcessSockEvents,PMode(Val),0,ThId)
>;
> //FreeMem(Val)
>
> Опять таки,если не сделать FreeMem(Val),то  будет
> утечка.Если сделать,то будет еще большая беда. Как
> быть?

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

Только при чём тут сабж и конференция Сети ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо