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

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

TIdTcpServer [D7, WinXP]


Страницы:   1 2

Ozone ©   (2004-04-22 09:46:00) 

Как при обработке события OnExecute сделать синхронизацию?

Пишу так

procedure Test;
begin
    {...}
end;

procedure TFServer.tcpServerExecute(AThread: TIdPeerThread);
begin
    {...}
    AThread.Synchronize(???);
    {...}
end;


И нужно ли это, если при обработке данного события необходимо выполнять достаточно длинные по времени действия?

Всем спасибо.


Ozone   (2004-04-22 11:04:00) [21]

Сорри за баг с мессагой.


Ozone   (2004-04-22 11:00:00) [22]

У меня в обработчике стоит что-то типа того:


 < читаем строку >
 < читаем Stream >

 <сохраняем в файл>  
 <сохранияем в БД>
 <кое-что выводим на экран>
 
 <принимаем строку>


Все это нормально работает до того момента, когда я принуддительно не закрою сервер когда к нему еще подключены клиенты (выдает "Terminate Thread Timeout")

PS: У меня в обработчике стоит что-то типа того:


 < читаем строку >
 < читаем Stream >

 <сохраняем в файл>  
 <сохранияем в БД>
 <кое-что выводим на экран>
 
 <принимаем строку>


Все это нормально работает до того момента, когда я принуддительно не закрою сервер когда к нему еще подключены клиенты (выдает "Terminate Thread Timeout")

PS: подключение клиентов делал по аналогии в примером "IdTCPDemo"

Как решить проблему?


Reindeer Moss Eater   (2004-04-22 10:54:00) [23]

Скорее всего твой код должен быть похож на следующий

procedure TFServer.Test(AThread: TIdPeerThread);
begin
DoSomething;
DoSomethingElse;
AThread.Connection.Writeln('Test');
end;

procedure TFServer.tcpServerExecute(AThread: TIdPeerThread);
begin
   {...}
   Test(AThread)
   {...}
end;


Reindeer Moss Eater   (2004-04-22 10:48:00) [24]

Причем даже если нужен доступ к потоконебезопасным VCL, то все равно можно обойтись без этого метода Synchronize


Verg   (2004-04-22 10:42:00) [25]


> И нужно ли это, если при обработке данного события необходимо
> выполнять достаточно длинные по времени действия?


Применение Synchronize никак не связано с "длинной по времени" выполняемых в этом методе действий.
Synchronize  нужно применять для действий с потоконебезопасными объектами, такими как, например, визуальные оъекты VCL.


Reindeer Moss Eater   (2004-04-22 10:42:00) [26]

Могу.

А ты можешь сказать зачем тебе здесь метод Syncronyze?
Просто так, для мебели?


Ozone   (2004-04-22 10:39:00) [27]

TO Reindeer Moss Eater © [1]

А можешь обьяснить почему?


Reindeer Moss Eater   (2004-04-22 09:48:00) [28]

Не нужно


Страницы:   1 2

Наверх

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