문제

당신이 전화 할 때 어떻게 되는가 WaitForSingleObject() 당신이 만든 손잡이에 CreateFile() 또는 _get_osfhandle()?

설명 할 가치가없는 이유 때문에 사용하고 싶습니다. WaitForSingleObject() 내가 만든 손잡이를 기다리기 위해 _get_osfhandle(fd), 어디 fd 정기적 인 전화에서 나옵니다 _open(). 이게 가능해?

실제로 시도해 보았고 일부 기계에서는 예상대로 작동합니다 (손잡이는 더 많은 데이터를 읽을 수 있기 때문에 항상 신호 상태에 있습니다) 및 일부 시스템에서 WaitForSingleObject() 당신이 그것을 놔두면 무기한으로 차단됩니다.

MSDN 페이지 WaitForSingleObject() 처리 된 유일한 지원은 "알림 변경, 콘솔 입력, 이벤트, 메모리 리소스 알림, 뮤트, 프로세스, 세마포어, 스레드 및 대기 가능한 타이머"라고 말합니다.

또한 사용하면 다릅니다 CreateFile() 대신에 _get_osfhandle() CRT 파일 디스크립터에서?

도움이 되었습니까?

해결책

하지 마십시오. 보시다시피, 그것은 정의되지 않은 행동을 가지고 있습니다.

동작이 정의 되더라도 추가 코드를 작성하는 것을 좋아하지 않는 한 상대적으로 유용하지 않은 방식으로 정의됩니다. 해당 핸들의 비동기 I/O 작업이 완료되면 신호를 보내므로 I/O 작동이 완료된 추적으로 일반화되지 않습니다.

파일 핸들을 기다리려고하는 이유는 무엇입니까? 당신이 무기한으로 차단하지 않을 정도로 잘 지원되지 않는 일을 할 때 의도는 분명히 중요합니다.

다른 팁

다음 링크를 찾았습니다. concensus는 나에게 보인다.

파일 핸들을 기다리고 있습니다

비동기 핸들에서 I/O 조작이 시작되면 핸들은 서명되지 않은 상태로 들어갑니다. 따라서 WaitforsingleObject 또는 WaitformultipleObjects 작업의 맥락에서 사용되면 I/O 작동이 완료되면 파일 핸들이 신호가됩니다. 그러나 Microsoft는이 기술을 적극적으로 낙담시킵니다. I/O 운영 중 하나 이상이 존재하는 경우 일반화되지 않습니다. I/O 작업이 완료되면 핸들이 신호가됩니다. 따라서이 기술은 가능하지만 모범 사례로 간주되지는 않습니다.

오버 파드 모드에서 readDirectoryChangesw를 사용하십시오. WaitforsingleObject는 겹친 구조물에서 이벤트를 기다릴 수 있습니다.

다음 변경 알림 기능을 사용하는 경우 API WaitforSingleObject ()를 사용하여 파일 변경을 기다릴 수도 있습니다.
findfirstchangenotification ()
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findfirstchangenotification.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/waitforsingleobject.asp

ReadDirectoryChangesw의 "악"에 대한 흥미로운 메모 :
http://blogs.msdn.com/ericgu/archive/2005/10/07/478396.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top