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

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

Socket -> Thread [D6, Win95/98, WinXP]


Страницы:   1 2

FireMan_Alexey ©   (2004-05-23 10:33:00) 

Ув. Мастера!
Использую сокет в потоке и хотел задать вопрос по поводу обработки событий.

Вот заголовок класса:

TEvent=Procedure (Sender:TObject) of object;

TThreadSock=Class(TThread)
 Private  
   FSocket  :TSocket;
   FRead    :TEvent;
   FError   :Integer;
   FHost    :String;
   RecvMem  :TMyMemory;
   SendMem  :TMyMemory;
   Procedure Read;
   Procedure Write;
   Function  ReceiveLength(Socket:TSocket):Integer;
 Protected
   Procedure Execute;Override;
 Public
   Procedure   Lock;
   Procedure   Unlock;
   Procedure   SetSocket(Socket:TSocket);
   Constructor Create;
   Destructor  Destroy;Override;
   Property    Error       :Integer   Read FError;
   Property    SocketHandle:TSocket   Read FSocket;
   Property    Host        :String    Read FHost   Write FHost;
   Property    ReceiveData :TMyMemory Read RecvMem;
   Property    SendData    :TMyMemory Read SendMem;
   Property    OnRead      :TEvent    Read FRead   Write FRead;
 End;

Вопрос если я буду использовать вызов FRead(Self) и это будет вызываться процедура формы,
то не возникнет ли какое-нибудь исключение без использования синхронизации?
Уже пробовал такое сочетание.

Procedure Read;
Begin
 If Assigned(FRead) Then FRead(Self);
End;

А в процедуре Execute:

If (NetEvent.lNetworkEvents and FD_READ_BIT)<>0 Then Synchronize(Read);
Но такой вариант не проходит! Процедура Read даже не выполнятся!
Рассматривал модуль SCKTCOMP.Pas и видел там используют TCriticalSection. Для чего?


Digitman   (2004-05-24 08:17:00) [21]

вызов обработчиков транспортных событий в осн.код.потоке (см. Synchronize) полностью лишает смысла "вынос" гнездового транспорта в доп.код.поток


Polevi   (2004-05-23 19:20:00) [22]

>Процедура Read даже не выполнятся!
должна выполнятся, если конечно условие выполняется


Страницы:   1 2

Наверх

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