最近、古いアプリ (Borland C++ Builder 6 で作成) を Windows 7 x64 で実行しようとしたところ、IO スレッドが機能していないことがわかりました。デバッグは、問題がエラー処理クラスにあり、クリティカル セクションを離れていないことを示した (単純なラッパー クラスを介して間接的に) ため、ログに追加されたすべてのメッセージが の 2 回の呼び出しを引き起こしましたが、 のEnterCriticalSection
呼び出しは 1 回だけでしLeaveCriticalSection
た。
このエラーによってクラスが使用できなくなるように思われますが、これは元の開発者が積極的に使用している一般的なクラスの 1 つであり、この特定のアプリケーションは Windows 2000/XP で常に正常に動作していました。問題は、なぜこのエラーが Windows 7 でのみ発生したのかということです。
ここでクリティカル セクションに関する MSDN の記事と提案された質問を読みましたが、唯一の動作の変更点は未定義の取得順序であり、これは間違いありません。