![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIdTcpServer [D7, WinXP]
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]Не нужно