Was passiert, wenn Sie WaitForSingleObject()
auf einem Handle aufrufen, das Sie mit CreateFile()
oder _get_osfhandle()
erstellt haben?WaitForSingleObject auf einem Datei-Handle?
Für nicht wert Gründe erklären ich WaitForSingleObject()
auf einem Griff zu warten, verwenden möchte, dass ich mit _get_osfhandle(fd)
erstellt haben, wo fd
-_open()
von einem normalen Anruf kommt. Ist das möglich?
Ich habe es in der Praxis erprobt und auf einigen Maschinen es wie erwartet funktioniert (Der Griff ist immer in dem signalisierten Zustand, weil Sie mehr Daten lesen können), und auf einigen Maschinen auf unbestimmte Zeit WaitForSingleObject()
blockiert, wenn Sie es zulassen . Die MSDN-Seite für WaitForSingleObject()
besagt, dass die einzigen unterstützten Dinge, die es handhabt, sind "Benachrichtigungen ändern, Konsoleneingabe, Ereignisse, Speicherressourcenbenachrichtigungen, Mutex, Prozesse, Semaphore, Threads und Waitable-Timer."
Zusätzlich würde es anders sein, wenn ich CreateFile()
anstelle von _get_osfhandle()
auf einem CRT-Dateideskriptor verwenden würde?
Die Operation ist gut definiert. Dies ist dokumentiert unter [GetOverlappedResult] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683209.aspx). Es kann entmutigt werden, aufgrund der Art und Weise wie es implementiert wird, und möglicherweise nicht allgemein nützlich sein. Es gibt bessere Möglichkeiten. Es ist jedoch gut definiert. – IInspectable