Que se passe-t-il lorsque vous appelez WaitForSingleObject()
sur un descripteur que vous avez créé avec CreateFile()
ou _get_osfhandle()
?WaitForSingleObject sur un descripteur de fichier?
Pour des raisons pas la peine d'expliquer que je voudrais utiliser WaitForSingleObject()
attendre sur une poignée que j'ai créé avec _get_osfhandle(fd)
, où fd
provient d'un appel régulier à _open()
. Est-ce possible?
Je l'ai essayé en pratique, et sur certaines machines cela fonctionne comme prévu (le HANDLE est toujours dans l'état signalé car vous pouvez lire plus de données), et sur certaines machines WaitForSingleObject()
bloquera indéfiniment si vous le laissez . La page MSDN pour WaitForSingleObject()
indique que les seules choses prises en charge sont «les notifications de modification, les entrées de console, les événements, les notifications de ressources mémoire, les mutex, les processus, les sémaphores, les threads et les minuteurs attendus».
De plus, cela serait-il différent si j'utilisais CreateFile()
au lieu de _get_osfhandle()
sur un descripteur de fichier CRT?
L'opération est bien définie. Cela est documenté sous [GetOverlappedResult] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683209.aspx). Il peut être découragé, en raison de la façon dont il est mis en œuvre, et peut ne pas être généralement utile. Il y a de meilleures options. Cependant, il est bien défini. – IInspectable