Форум: "Сети";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизИспользование TIdSync в Indy10 Найти похожие ветки
← →
BanderLog (2006-05-17 10:02) [0]Здравствуйте, Мастера.
Испоьзовании TIdCmdTCPServer.
По получению команды на сервер, мне необходимо вывести в лог сообщение. Для синхронизации с главным потоком программы можно использовать TIdSync, но возник вопрос. При создании объекта TIdSync необходимо указать поток TIdThread. Как мне узнать. в каком потоке выполняется данная команда, входной параметр при выполнении команды TIdCommand?
← →
Сергей М. © (2006-05-17 10:22) [1]см. св-во TIdCommand.Thread
← →
BanderLog (2006-05-17 10:40) [2]Возможно виновата 10-я версия, но у TIdCommand нет такого свойства.
← →
BanderLog (2006-05-17 10:42) [3]Вырезка из хелпа:
TIdCommand provides properties that identify the Thread generating the command, and the CommandHandler used to service the command. In addition, TIdCommand also implements methods that allow assigning the response for the command, and a mechanism for sending the command reply using the Thread connection that generated the command request.
Вот только где же взять какой в каком потоке?
← →
Сергей М. © (2006-05-17 10:57) [4]
> BanderLog (17.05.06 10:42) [3]
В 9-й версии справка, которую ты процитировал, выглядит точно так же, слово в слово.
Обрати внимание на подчеркнутое в этой фразеTIdCommand provides properties that identify the Thread generating
Это - ссылка. Жмакаем на нее и читаем :Thread is a read-only TIdPeerThread property that represents the thread of execution for the peer connection generating the TIdCommand. Thread provides a mechanism for sending the command reply and response to the peer connection. Thread also allows access to properties and methods of the server in the thread of execution using the Server property.
Thread is assigned when the TIdCommand instance is created by the command handler for the executing thread.
← →
BanderLog (2006-05-17 11:18) [5]В 10-й нету такого свойства, следовательно и ссылки нету. :(
Возможно потоком являетсяIdCommand.Context.Yarn
, но мой ломаный английский мне мешает :(Context - Client context for the command and command handler
.Yarn - Represents the thread or fiber for executing the task.
Yarn is a read-only TIdYarn property that represents the thread or fiber used to execute the task. Yarn is initialized using the value passed an an argument to the Create constructor.
Но опять же, его надо приводить к типу либоTIdYarnOfThread.Thread
, либоTIdYarnOfFiber.Fiber
Но тогда не работает ничего. :(
← →
Сергей М. © (2006-05-17 11:31) [6]
> BanderLog (17.05.06 11:18) [5]
Без исх.текстов 10-ки (у меня 9-ка) ничего подсказать здесь не смогу.
Но посоветую использовать любой иной метод синхронизации, например, посылкой синхронного сообщения окну той формы, которая пишет в лог.
← →
BanderLog (2006-05-17 11:39) [7]Спасибо, будем копать...
← →
Eraser © (2006-05-18 01:52) [8]
> BanderLog
да.. не понятно зачем, но в 10 отказались от встроеного метода синхронизации и вообще немного поменяли концепцию.
Так что для вывода в лог сообщений, прийдётся защищать этот вывод, к примеру, критической секцией.
← →
BanderLog (2006-05-24 08:21) [9]В принципе с TIdSync разобрался. Помог буржуйский пример с какого то сайта. В принципе гемоно, но работает.
На данный момент возник другой вопрос.
TIdCmdTCPServer и TIdCmdClient. Сервер работает без нареканий, но вот как работает клиент я понять не могу. Вообще... (
Делаем простой пример.
1. Помещаем на форму сервер и клиент и заполняем их свойства. (host, port)
2. У сервера заводим команду "Quit", у которой свойство Disconnect устанавливаем в True. И в свойствах OnConnect, OnDisconnect пишем инфу в лог.
3. В onConnect, onDisconnect клиента тоже пишем в лог.
4. Кидаем на форму кнопку и на onClick пишем кодif IdCmdTCPClient1.Connected then
begin
// IdCmdTCPClient1.IOHandler.WriteLn("Quit");
IdCmdTCPClient1.Disconnect;
end
else
IdCmdTCPClient1.Connect;
Компилим и запускаем.
По нажатию на кнопку клиент коннектится, в лог пишется инфа о подключении и сервера и клиента.
Нажимаем второй раз на кнопку - приложение уходит в себя на вечно.
Если разкоментировать строку с отсылкой команды: то при отключении, сервер говорит что клиент отключен, от клиента никаких сообщений. Но при попытке повторного коннекта выпадает аксесс с сообщением о чтении памяти по адресу 0000000.
Трассировка показала что после выполнения Disconnect компонент
IdCmdTCPClient1 = nil. Это как?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c