Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.01 c
7-86564
Ал
2003-10-22 10:14
2003.12.26
Как узнать, что запущен скринсэйвер и корректно завершить его?


14-86513
euru
2003-11-12 15:37
2003.12.26
Виртуальные классы


14-86497
Igor_thief
2003-11-27 15:18
2003.12.26
Оценивание


14-86518
raymond
2003-12-04 08:57
2003.12.26
Диски караоке...


3-86305
Илайдж
2003-12-02 11:30
2003.12.26
try .... except в SQL-синтаксисе




   Наверх