Есть ConnectionManager
, который ожидает входящих соединений. Для каждого входящего соединения создается экземпляр Connection
, который обрабатывает входящий и исходящий трафик этого соединения. Каждый Connection
имеет Watchdog
, который обрабатывает условия «плохое соединение» и звонки зарегистрированных «Listerners». Один «прослушиватель» - это ConnectionManager
, который закрывает соединение и удаляет экземпляр Connection
, который, в свою очередь, удаляет соответствующий сторожевой таймер.
Wait. А. Минута.
Watchdog
вызывает ConnectionManager
, который удаляет Connection
, который удаляет Watchdog
? Сторожевой пес преследует свой собственный хвост.
Я полностью заблокирован. Как мне решить эту проблему?
Решение : Я сделаю слушателя асинхронным, хотя я пока не знаю, как это сделать без особой боли. Watchdog
не знает о ConnectionManager
. Это довольно общий характер. Кроме того, в Win32-Thread-API нет ничего похожего на «join», поэтому мне может понадобиться свернуть свои собственные с GetExitCodeThread()
и STILL_ACTIVE
...
Спасибо, ребята.