최근에 Windows 7 x64에서 이전 응용 프로그램 (Borland C++ Builder 6으로 작성)을 실행하려고 시도했지만 IO 스레드가 작동하지 않는 것으로 나타났습니다. 디버깅은 오류 처리 클래스에서 중요한 섹션 (단순한 래퍼 클래스를 통해 간접적으로)을 벗어나지 않아서 로그에 추가 된 모든 메시지가 EnterCriticalSection
이라는 두 번의 호출을 야기했지만 LeaveCriticalSection
의 한 번의 호출 만 발생했음을 보여주었습니다.Windows 2000/XP의 중요 섹션과 관련된 잘못된 동작
이 오류는 클래스를 사용할 수 없게 만들지 만 원본 개발자가 적극적으로 사용하는 일반적인 클래스 중 하나이며이 특정 응용 프로그램은 Windows 2000/XP에서 항상 올바르게 작동합니다. 따라서이 오류가 Windows 7에서만 나타나는 이유는 무엇입니까?
중요한 섹션 및 제안 된 질문에 대한 MSDN 기사를 읽었습니다. 여기서 언급 한 유일한 동작 변경은 주문을 얻지 못하는 것입니다.
답변이 아닙니다. –
나는 이미 (LeaveCriticalSection()의 누락 된) 문제를 발견하고 고쳤다. 내가 뭘 알고 싶은 이유는 그것이 분명히해서는 안되는 이전 Windows 버전에서 작동합니다. –
작동 방식이 없습니다. 'LeaveCriticalSection()'을 호출하지 않으면 잠금을 얻으려는 다른 스레드가 교착 상태가됩니다. 이 동작은 모든 Windows 버전에서 동일합니다. –