Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.48 MB
Время: 0.053 c
15-1158769695
Ringo
2006-09-20 20:28
2006.10.15
XP не видит CDROM


3-1155066396
lexander
2006-08-08 23:46
2006.10.15
Почему не работает такой запрос?


2-1159181038
йцукен
2006-09-25 14:43
2006.10.15
Динамическое создание PopupMenu


9-1137052790
Nic
2006-01-12 10:59
2006.10.15
Чем отличается Managed DirectX от DirectX API?


15-1158929841
StriderMan
2006-09-22 16:57
2006.10.15
Куда попадают объекты после деструктора?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский