Форум: "Сети";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
ВнизПро потоки в СЕРВЕРЕ Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c