Tout le monde connaît le code pour exécuter un programme et d'attendre à la fin:CreateProcess avec la dégradation des performances WaitForSingleObject
CreateProcess(...
WaitForSingleObject(Process.hProcess, INFINITE
Il a été utilisé à plusieurs reprises par moi-même. Mais récemment, j'ai trouvé que cet appel quand il lance un programme avec une lecture multimédia a des performances moins bonnes que le même processus en cours d'exécution à partir d'un gestionnaire de fichiers général (Windows XP). C'est correct avec la consommation CPU de mon processus (parent), mais pendant la lecture du fragment, il y a de petits arrêts inattendus.
J'ai fait un peu de changement à quelque chose comme:
CreateProcess ...
do {
Sleep(100);
Res = WaitForSingleObject(Process.hProcess, 10);
} while (Res == WAIT_TIMEOUT);
Et cela a aidé. Maintenant, le processus enfant joue le fragment sans problèmes. Alors, quel est le problème avec le premier fragment et est-il documenté quelque part? Comme je le vois à partir des tests, la deuxième "attente" est plus "détendue" que la première, mais la première ne mange pas CPU au moins formellement
Vous regardez du mauvais côté. Apparemment, le processus enfant a une performance pire si le parent est bloqué en attente. WTF en effet. – MSalters
Légère buglet dans cette réponse: le lien pointé par 'MsgWaitForMultipleObjects()' pointe vers la documentation MSDN de la fonction Sleep(). Un peu drôle en quelque sorte. ;-) –