Асинхронный сокет и VCL
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.223] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Асинхронный сокет и VCL
|
Сообщ.
#1
,
|
|
|
|
Добрый день!
Интересуюсь, как работает механизм событий в асинхронном клиенте\сервере в делфи. Насколько я понимаю, всё завязано на цикле обработки оконных сообщений, где в числе прочего проверяется, нет ли новых событий для нашего listener-а. То есть, если в главном потоке вызвать sleep(100000), то обработка эта подвиснет, и сокет ничего не услышит. Где можно почитать про это конкретней? И - можно ли схитрить, сделав вторую независимую форму (со своей очередью сообщений) и прикрепить сокеты к ней? |
|
Сообщ.
#2
,
|
|
|
|
Я могу предположить, опираясь на свой не богатый опыт, что если будет обработка сокета висеть в другом потоке, то все будет работать корректно, даже если основной поток уснет.
|
|
Сообщ.
#3
,
|
|
|
|
Работает так же, как и любые оконные сообщения. В главном потоке крутится цикл выборки сообщений, если какой-то обработчик зависает - всё остальное также висит и ждет, пока он отработает.
Хэндл сокета, как и любого окна, привязывается к тому потоку, в котором был создан. Соответственно если сокет создан во вспомогательном потоке - обработчик будет вызван в нем же. Но для этого этот поток должен реализовывать цикл выборки сообщений. Кстати, тонкий момент: создание сокета в TOtherThread.Create не даст никакого эффекта! Поток начинает выполняться только с момента входа в процедуру Execute |
|
Сообщ.
#4
,
|
|
|
|
Цитата Nagva27 @ Добрый день! Интересуюсь, как работает механизм событий в асинхронном клиенте\сервере в делфи. Насколько я понимаю, всё завязано на цикле обработки оконных сообщений, где в числе прочего проверяется, нет ли новых событий для нашего listener-а. То есть, если в главном потоке вызвать sleep(100000), то обработка эта подвиснет, и сокет ничего не услышит. Где можно почитать про это конкретней? И - можно ли схитрить, сделав вторую независимую форму (со своей очередью сообщений) и прикрепить сокеты к ней? Это решение нельзя применять в коммерческом коде. |