Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Про потоки в СЕРВЕРЕ   Найти похожие ветки 

 
alt7   (2003-10-28 17:58) [0]

Специально для Reindeer Moss Eater - это уже другой вопрос ;))

Добрый вечер, вот такая ситуация.

Delphi 7. С потоками работал... практически не работал, потому видимо и запарка...
Имеем компонент на форме, класс TIdTelnetServer.
В OnCommandHandlers пара команд (LAST, ALL), а также есть код для OnNoCommandHandler.

[code]
vIdTelnetSrv2.CommandHandlers.Items[0].OnCommand := EvClass.IdTelnetSrv2Command_LAST;
vIdTelnetSrv2.CommandHandlers.Items[1].OnCommand := EvClass.IdTelnetSrv2Command_ALL;
[/code]

При поступлении команды от клиента, к примеру LAST, запускается процедура, которая лежит в отдельном классе (создал специально для всяких мелких процедур). EvClass - экземпляр этого класса.


[code]
EventClass = class(TObject)
...
procedure IdTelnetSrv2Command_LAST(ASender: TIdCommand);
procedure IdTelnetSrv2Command_ALL(ASender: TIdCommand);
end;
[/code]

Содержимое:

[code]
procedure EventClass.IdTelnetSrv2Command_LAST(ASender: TIdCommand);
var
vMyThread_LAST: TThread;
begin
vMyThread_LAST := TMyLASTThread.Create(Form_CTD.vIdTelnetSrv2,"LAST",ASender);
vMyThread_LAST.Terminate;
end;
[/code]

И в свою очередь:

[code]
TMyLASTThread = class(TThread)
private
FIDTS: TIdTelnetServer;
FCommand: String;
FASender: TIdCommand;
procedure My_LAST(ASender: TIdCommand);
protected
procedure Execute; override;
public
constructor Create(IDTSin: TIdTelnetServer; Command: String; ASender: TIdCommand);
end;
[/code]

В конструкторе приоритет пришлось поставить tpTimeCritical, иначе ответ приходит не сразу, а с задержкой, что недопустимо.
Дополнительно создан еще поток, который постоянно работает, то есть в Execute написано while not Terminated и.т.д. Но это так, к слову.

Полностью аналогично и для команды ALL.
Не знаю, правильно ли я работаю с потоком, вероятно нет, но вот мой вопрос:

После нескольких удачных попыток ввести команды клиентом (через телнет), сервер на очередной запрос ALL, LAST (без разницы), валится с сообщением Access Violation и т.д.
В какую сторону мне копать?


 
Reindeer Moss Eater ©   (2003-10-29 09:15) [1]

Сервер сам по себе многопоточный и клиентские сеансы он обрабатывает в доп.потоках. Зачем потребовались еще доп. потоки для обработки команд - не совсем ясно.

Экземпляр потока сеанса клиента доступен через ASender.Thread или если нет CommandHandlers - то в OnExecute параметр AThread.


 
alt7   (2003-10-29 14:13) [2]

Благодарю, потоки убрал (ставил из-за tpTimeCritical), поставил TCriticalSection, вроде тьфу-тьфу работает..



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
3-86291
ploxish
2003-12-01 11:23
2003.12.26
Interbase & Generator


14-86544
pasha_golub
2003-12-01 14:06
2003.12.26
Эффект увядания


1-86373
sad
2003-12-15 11:06
2003.12.26
Аналог опертора макроподстановки Foxpro (&) в Delphi


3-86287
rel_
2003-12-04 10:24
2003.12.26
помогите SQL запросом


3-86309
Chris
2003-12-04 09:38
2003.12.26
Механизм подключения к SQL Server