Usando um retorno de chamada de evento para gerenciar a reprodução em buffer
Para usar um retorno de chamada de evento, use a função CreateEvent para recuperar o identificador de um evento. Em uma chamada para a função midiOutOpen , especifique CALLBACK_EVENT para o parâmetro dwFlags . Depois de usar a função midiOutPrepareHeader , mas antes de enviar eventos MIDI para o dispositivo, crie um evento não atribuído chamando a função ResetEvent , especificando o identificador de evento recuperado por CreateEvent. Em seguida, dentro de um loop que verifica se o bit MHDR_DONE está definido no membro dwFlags da estrutura MIDIHDR , use a função WaitForSingleObject , especificando o identificador de evento e um valor de tempo limite infinite como parâmetros.
Um retorno de chamada de evento é definido por qualquer coisa que possa causar um retorno de chamada de função.
Como os retornos de chamada de evento não recebem notificações específicas de fechamento, conclusão ou abertura, um aplicativo pode precisar marcar o status do processo que está aguardando após a ocorrência do evento. É possível que várias tarefas possam ser concluídas quando WaitForSingleObject retornar.