【发布时间】:2008-12-08 13:25:38
【问题描述】:
有ConnectionManager 等待传入连接。对于每个传入连接,它都会创建一个Connection 实例,用于处理此连接上的入站和出站流量。每个Connection 都有一个Watchdog,它处理“坏连接”情况并调用注册的“侦听器”。一个“侦听器”是ConnectionManager,它关闭连接并删除Connection 实例,这反过来又删除了相应的Watchdog。
等等。一分钟。
Watchdog调用ConnectionManager删除Connection删除Watchdog?看门狗追逐自己的尾巴。
我完全被屏蔽了。我该如何解决这个问题?
解决方案:我将让 Listener 变成异步的,尽管我还不知道如何做到这一点而不会带来太多痛苦。 Watchdog 不知道 ConnectionManager。这是相当通用的。此外,Win32-Thread-API 没有“加入”之类的东西,所以我可能需要使用 GetExitCodeThread() 和 STILL_ACTIVE...
谢谢各位。
【问题讨论】:
-
我对这个问题感到困惑——如果您每个连接有 1 个看门狗并且触发了该看门狗,您希望删除连接(及其关联的看门狗),不是吗?
标签: c++ multithreading