Следуя этой теме, я пытаюсь создать приложение C ++ Builder XE5 с:
- основная форма
- a
TIdTCPClient
TThread
для этогоTIdTCPClient
соединения, которое открывает сокет, отправляет запрос, а затем бесконечно ожидает нескольких ответов- действия, которые происходят в сокете, вызовут обновления в основной форме
Мне не удалось найти никаких примеров; Насколько я могу судить, все примеры, на которые есть ссылки со страницы Indy Demos, не используют никаких потоков в своих клиентах.
Мои вопросы:
- Должен ли TIdTCPClient быть в основной форме (как компонент времени разработки) или он должен быть переменной-членом класса потока?
- В событиях, запускаемых TIdTCPClient, нужно ли синхронизировать код в обработчиках событий (которые являются функциями-членами моей основной формы)?
- Безопасно ли как для основного потока VCL, так и для клиентского потока выполнять вызовы функций для объекта TIdTCPClient?
В настоящее время я выполняю действия в основной форме в ответ на каждое событие, а также в ответ на получение данных в сокете. На данный момент мой код заполнен временными переменными и функциями-заглушками, потому что Synchronize
требует закрытия void(void)
, а это довольно спагетти. Поэтому мне интересно, не придерживаюсь ли я принципиально неправильного подхода.