我们的(Windows本地C++)应用程序由线程对象和管理器组成。它写得非常好,设计中可以看到管理器对象控制着他们的爪牙的生命周期。各种物体发送和接收事件;有些事件来自Windows,有些是自制的。受控应用程序关闭策略
一般情况下,我们有,所以我们使用使用Win32临界区,信号灯等的手卷同步技术是非常知晓线程的互操作性。但是,偶尔我们会因为事件处理程序重入等原因而在关闭期间遭受线程死锁。
现在我想知道是否有一个像样的应用程序关闭策略,可以让我们更容易开发 - 就像每个对象从中央控制器注册关闭事件并相应地更改其执行行为?这是太天真还是脆弱?
,我宁愿没有规定重写整个应用程序使用微软的并行模式库或类似的策略。 ;-)
感谢。
编辑:
我想我要求的方法在复杂的应用程序中许多线程和事件被解雇所有的时间控制对象的生命周期。 Giovanni的建议很明显(我们自己动手滚动),但我相信必须有各种现成的策略或框架,才能以正确的顺序干净地关闭活动对象。例如,如果您想将您的C++应用程序基于IoC范例,则可以使用PocoCapsule而不是尝试开发自己的容器。在应用程序中是否有类似的控制对象生命周期?
为什么事件处理程序(已使用)/(尤其是问题)在关机时(而不是在其他时间)? – Mankarse
我只是想写一个答案,但我意识到这个问题是无法解析的,因为它如果你遇到了死锁,那么这不是一个设计问题,而是一个实现问题(当然你现在的设计可能会使一个正确的实现变得不可能)任何修复死锁的设计都是一个改进。 – Mankarse
@mankarse因为我们的关闭策略在某些地方不够强大,以防止在事件被调度和处理的过程中出现死锁,当然这些都是简单的错误,并且当发现时,这些错误是固定的。 – dripfeed