不正确的行为最近我试图在Windows 7 X64的运行旧的应用程序(写在Borland的C++ Builder中6),发现IO线程不能正常工作。调试表明,问题是不会离开临界区(间接,通过一个简单的包装类)的错误处理类,所以添加每个消息日志引起的EnterCriticalSection
两个电话,但只有一个LeaveCriticalSection
调用。在Windows 2000中涉及的关键部分/ XP
在我看来,这个错误应该使类不可用,但它是积极地使用原开发商共同的类别之一,而这个特定的应用程序始终在Windows 2000/XP的罚款。所以问题是为什么这个错误只出现在Windows 7中?
我读过有关的关键部分MSDN文章,这里提出的问题,唯一的行为改变注意的是未定义的收购秩序,这绝对不是这样。
不是一个真正的答案。 – 2012-05-28 16:50:43
我已经找到了问题(缺少'LeaveCriticalSection()'调用)并修复它。我想知道的是为什么它可以在以前的Windows版本上运行,但它显然不应该。 –
它无法工作。如果你不调用'LeaveCriticalSection()',任何其他试图获取锁的线程都会死锁。这种行为在所有版本的Windows上都是相同的。 –