最近我尝试在 Windows 7 x64 上运行一个旧应用程序(用 Borland C++ Builder 6 编写),发现 IO 线程不工作。调试表明问题出在错误处理类没有离开临界区(间接地,通过一个简单的包装类),因此添加到日志的每条消息都会导致两次调用,EnterCriticalSection
但只有一次调用LeaveCriticalSection
.
在我看来,这个错误应该使该类无法使用,但它是原始开发人员积极使用的常见类之一,并且这个特定的应用程序在 Windows 2000/XP 中始终运行良好。所以问题是为什么这个错误只出现在 Windows 7 中?
我在这里阅读了有关关键部分和建议问题的 MSDN 文章,唯一注意到的行为变化是未定义的获取顺序,这绝对不是这种情况。