2013-03-08 5 views
1

another question의 설명을 읽으면 GetWindowThreadProcessId Windows API 메서드를 사용할 때 경쟁 조건이 발생할 위험이 있음을 알았습니다. 얼마나 큰 위험입니까?GetWindowThreadProcessId 경쟁 조건 위험

내가 시도하고있는 것에 배경 정보를 제공 할 수있게하십시오. C#으로 개인적인 용도로 시간 기록 앱을 쓰고 있습니다. 내 의도는 사용중인 응용 프로그램에 대해 시간을 기록 할 수 있도록 활성 창이 변경되었을 때 응용 프로그램이 Windows API 호출을 통해 감지되도록하는 것이 었습니다. 나는 이미 활성 윈도우가 변경 될 때이를 감지하는 코드를 찾았습니다. 이제 그 창과 관련된 프로세스를 결정하려고합니다. 내가 그 지점에 여러 게시물을 해당 지점을 GetWindowThreadProcessId 해결책으로 언급했지만 내가 사용하는 잠재적 인 문제가 될 것 같습니다. GetWindowThreadProcessId이 안전한 방법이 아닌 경우 다른 대안을 사용할 수 있습니다.

내 희망은 코드를 C#으로 전부 유지하는 것이지만, 필요한 경우 C/C++로 코드의 일부를 움직이는 것에 완전히 반대하지는 않습니다.

감사합니다.

답변

3

인종은 피할 수 없습니다. 원자 적으로 원하는 것을 수행 할 수있는 API는 없습니다.

그러나 다소 호의적 인 경쟁입니다. 무엇이 잘못 될 수 있습니까? 창은 당신이 그것에 대해 물어보기 직전에 닫힙니다. 따라서 오류가 발생했다가 다시 시도하십시오. 경쟁 조건을 알고 오류를 정상적으로 확인하고 처리해야합니다.

+0

솔직히, 그게 내가 생각한 것입니다. 윈도우가 열려있는 한 hWnd는 변경되지 않습니다. 맞습니까? 그렇다면 창을 닫을 때 나는 이것에 대해 염려해야 할 유일한 시간이라고 생각할 것입니다. –

+1

네, 맞습니다. 오류를 잘 처리하면 문제가되지 않습니다. Windows는 핸들 재사용을 피하려고 열심히 노력합니다. 당신은 probs 없을 겁니다. –