Eu fui envolvido recentemente em mover uma aplicação de 32 bits que fosse escrita inicialmente para o NT de Microsoft Windows a GNU/Linux. Esta aplicação conteve um grande número chamadas a NtWaitForSingleObject e um número menor de chamadas a NtWaitForMultipleObject.
Agora qualquer um que teve que mover o código que contem mais do que alguns exemplos destes APIs Win32 particulares, ou seus primos próximos WaitForSingleObjectEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx, etc. a Unix ou GNU/Linux provavelmente já shuddering com a recordação de dias e de noites laboriosos longos da codificação experimental e de erro para tentar e imitar corretamente a semântica e a funcionalidade destes APIs específicos particulares de Microsoft Windows, mas para o leitor que não teve que ainda tentar mover tal aplicação, este borne e meu borne seguinte pode ajudá-lo excepto sua sanidade (e possivelmente seu cabelo!) algum dia no futuro.
Pela maneira, que ambos os APIs são marcados deprecaram em MSDN por Microsoft mas ainda trabalham como esperado em Windows NT e em Windows Xp. Eu não sou certo sobre Windows Vista ou Windows 7 porque eu não os testei nestes sistemas de exploração. Os dois APIs deprecados foram substituídos pelos APIs equivalentes WaitForSingleObject e WaitForMultipleObject respectivamente. Para o restante deste borne eu apenas discutirei os APIs da recolocação mas mais do que eu digo seja válido para deprecada ou a recolocação API.
Na primeira examinação WaitForSingleObject parece razoavelmente benigno. A descrição em MSDN indic que “esta função retorna quando o objeto especific está no estado sinalizado ou quando o intervalo do intervalo de parada decorre”. Soa como um API razoavelmente simples e inócuo, direita? Talvez algo similar ao pthread_cond_timedwait de POSIX.1 API. Bem, você é absolutamente errado e este borne e o seguinte explicarão por que.
WaitForSingleObject e seus primos podem esperar um sinal de alguns ou todo o seguimento “objeta”: mude a notificação, a entrada do console, o evento, o trabalho, a notificação do recurso de memória, o mutex, o processo, o semaphore, a linha e o temporizador waitable e em circunstâncias limitadas em limas e em I/o. da lima. Quando sinalizada apropriadamente, uma linha é desbloqueada e continua. Nenhum API estandardizado publicado no mundo de GNU/Linux ou de Unix vem vindo a segurar esta escala dos objetos em um único API.
Esta é provavelmente a uma única área onde um Win32 API é projetado melhor do que o jogo de GNU/Linux ou de Unix API. Em GNU/Linux e em Unix há uns APIs específicos para esperar tipos diferentes de