Récemment j'ai été impliqué en mettant en communication une application à 32 bits qui a été au commencement écrite pour le NT de Microsoft Windows à GNU/Linux. Cette application a contenu un grand nombre d'appels à NtWaitForSingleObject et un plus petit nombre d'appels à NtWaitForMultipleObject.
Maintenant quiconque qui a dû mettre en communication le code contenant plus que quelques exemples de ces api Win32 particuliers, ou leurs cousins étroits WaitForSingleObjectEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, etc. à Unix ou GNU/Linux probablement frissonne déjà avec le souvenir de longs jours et nuits laborieux du codage d'essai et des erreurs pour essayer et imiter correctement la sémantique et la fonctionnalité de ces api spécifiques particuliers de Microsoft Windows, mais pour le lecteur qui n'a pas encore dû essayer de mettre en communication une telle application, ce poteau et mon prochain poteau peut vous aider sauf votre santé d'esprit (et probablement vos cheveux !) autrefois à l'avenir.
D'ailleurs, tous les deux api sont marqués ont désapprouvé dans MSDN par Microsoft mais travaillent toujours comme prévus dans Windows NT et Windows Xp. Je ne suis pas sûr au sujet de Windows Vista ou de Windows 7 car je ne les ai pas examinés sur ces logiciels d'exploitation. Les deux api désapprouvés ont été remplacés par les api équivalents WaitForSingleObject et WaitForMultipleObject respectivement. Pour le reste de ce poteau je discuterai juste les api de remplacement mais plus de ce que je dis soyez valide pour désapprouvée ou le remplacement api.
Au premier examen WaitForSingleObject semble assez bénin. La description dans MSDN déclare que « cette fonction retourne quand l'objet spécifique est dans l'état signalé ou quand l'intervalle de temporisation s'écoule ». Ressemble à d'un api assez simple et innofensif, droite ? Peut-être quelque chose semblable au pthread_cond_timedwait de POSIX.1 api. Bien, vous avez complètement tort et ce poteau et ce qui suit expliqueront pourquoi.
WaitForSingleObject et ses cousins peuvent attendre un signal du quelques un ou tout des « objets » suivants : changez l'avis, l'entrée de console, l'événement, le travail, l'avis de ressource de mémoire, le mutex, le processus, la sémaphore, le fil et le temporisateur waitable et dans des circonstances limitées sur les dossiers et l'entrée-sortie de dossier. Une fois convenablement signalé, un fil est dégagé et continue. Aucun api normalisé édité dans le monde de GNU/Linux ou d'Unix ne vient venu à manipuler cette gamme des objets dans un api simple.
C'est probablement l'un seul secteur où un Win32 api mieux est conçu que l'ensemble de GNU/Linux ou d'Unix api. À GNU/Linux et à Unix il y a des api spécifiques pour attendre différentes sortes de