Главная страница
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.019 c
1-86383
BKV
2003-12-15 13:03
2003.12.26
Ограничение изменения размеров в design time.


9-86237
elf_123
2003-06-06 15:37
2003.12.26
Тякстуры...


7-86567
Kolega
2003-10-22 10:02
2003.12.26
Help


1-86454
Vitalik
2003-12-13 12:19
2003.12.26
Скрытый файл


1-86353
bober
2003-12-12 14:01
2003.12.26
создание функций в run_time