Документы довольно скудны в деталях, но я считаю, что это работает следующим образом:
- Если вы используете обратный вызов подписки, то он будет вызываться в выделенном потоке.Таким образом, если вы задержитесь в этом, он будет блокировать дальнейшие обратные вызовы, но не другой поток программы
- . Если вы используете SignalEvent, он получит сигнал, когда придет событие, и никакие потоки не будут созданы автоматически.
Вы можете проверить, что это действительно другой поток, вызвав GetCurrentThreadId () из кода, который вызывает EvSubscribe (), и из обратного вызова, и сравните значения.
Моя рекомендация заключается виспользуйте параметры потоков, так как обработчики событий в Windows так сложно запрограммировать правильно.
Что касается совместного использования сокета TCP, вы можете совместно использовать сокет между потоками, но вы не должны писатьк нему из более чем одного потока одновременно.Также не читайте.
Однако вы можете читать из одного потока и писать из другого.Также вы можете закрыть сокет из одного потока, в то время как другой находится в операции блокировки: он будет отменен.
Если вы обнаружите это ограничение, вы должны создать пользовательский поток и использовать его для отправки и / или полученияданные при взаимодействии с другими потоками с очередями или аналогичными.