Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
4-86593
karburator
2003-10-29 11:23
2003.12.26
не работает oemtochar()


14-86504
chs2r
2003-12-04 15:47
2003.12.26
Восстановление удаленных файлов


1-86449
NetKnight
2003-12-13 12:15
2003.12.26
Переобразование Unicode < - > Win


7-86580
crocodile_
2003-10-22 14:33
2003.12.26
WMI


6-86474
LOX
2003-10-10 20:23
2003.12.26
ICQ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский