La question est un peu obscure pour moi. Parlez-vous d'une API qui entre dans une boucle de message modale en interne? Cela crée-t-il une sorte de problème de ré-entrée pour vous? Si c'est le cas, alors il y a probablement de meilleurs moyens de résoudre votre problème. Si une API entre dans une boucle modale, alors il y a sans doute une bonne raison, et vous devriez le permettre. (Dans votre cas, je suppose que DirectShow communique avec un autre objet COM en interne.) S'il est correctement écrit, une boucle modale enverra toujours des messages aux autres fenêtres sur le même thread.
Dans tous les cas, si vous voulez vraiment faire, voici comment:
PostQuitMessage(0); // Signal quit to force the upcoming loop to exit
APIFunc(); // Enters modal loop internally
MSG msg;
PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE); // Eat the next WM_QUIT
La dernière étape est importante. Lorsqu'une boucle modale se ferme en raison d'un message WM_QUIT, elle doit publier un message d'abandon après sa fermeture (afin que l'application sache qu'elle doit quitter). Si vous ne le mangez pas, votre application sortira.