2012-01-20 4 views
2

내 서비스가 누군가 내 서비스를 중지하려고 시도 할 때 잠재적으로 WinHttpSendRequest을 실행할 수있는 스레드가 있습니다.동기 WinHttp 요청을 어떻게 취소 할 수 있습니까?

WinHttpCloseHandle documentation는 말한다 :

같은 문서를 나중에 다음, WinHttpCloseHandle

를 사용하여 HINTERNET 요청 핸들을 닫는 그러나에 의해 진행중인 동기 또는 비동기 요청을 종료 할 수있는 응용 프로그램에 보인다 이것을 모순된다. 그것은 :

응용 프로그램은 절대로 동기 요청에 WinHttpCloseHandle 호출해서는 안됩니다. 경쟁 조건이 생길 수 있습니다.

this blog post 나는 WinHttpCloseHandle에 전화 할 수 없다고 동의 한 것으로 보입니다.

서비스를 정상적으로 중지 할 수 있도록이 작업을 어떻게 취소 할 수 있습니까? 너무 오래 걸리고 서비스가 충분히 빨리 멈추지 않기 때문에 실제로는 WinHttpSendRequest이 시간 초과 될 때까지 기다릴 수 없습니다. 나는 창문이 오류로보고 다음 종료 강제로 서비스를 죽일 생각합니다.

아이디어가 인정 될 것입니다. 핸들 가까이 강제로 백그라운드 스레드 오프 WinHttpCloseHandle를 호출

답변

0

아마도 최선의 해결책이 아닙니다. 여전히 작동하며 원래 호출자는 "잘못된 핸들"오류 코드와 같은 것을 수신하게되고 요청이 강제 종료됩니다.

이 권력을 남용 할 가능성이 안전하지 않은 것, 하나는 오히려 대신 비동기 요청을 구현하는 것입니다. 그러나 오래된 서비스를 종료하는 경우에는 정상적으로 작동합니다.