2009-04-15 10 views
2

Affiche pour la première fois ici.L'application Win32 est suspendue pour minimiser l'animation de la fenêtre

J'écris une application audio en streaming multithread en C++ (MSVC) sur Windows XP SP2.

Le problème que j'ai rencontré est que, lors de la minimisation/restauration de n'importe quelle application sur la barre des tâches, tous les threads de mon application sont suspendus pendant que l'animation de la fenêtre est active. Cela m'affecte parce que cela fait que l'audio de mon application bégaie à chaque fois qu'une fenêtre est réduite ou restaurée. Si vous cochez la case "Animer les fenêtres en minimisant une maximisation" dans les propriétés de fenêtres/système/avancées/performances "effets visuels, planification du processeur, ..."/onglet Paramètres/Personnalisé semble résoudre ce problème.

Ajuster la priorité de mon processus sur "High" et "Realtime" n'aide pas.

Quelqu'un peut-il aider à faire la lumière sur ce sujet?

Répondre

3

Ces animations, ou la peinture de la fenêtre tout en faisant glisser autour (ce qui devrait créer des problèmes similaires) inonde le signal de message fenêtres avec des messages WM_PAINT et causer chaque petit widget/contrôle dans la fenêtre de se redessiner. Cela peut complètement ralentir un ordinateur et tous les threads et les processus qui s'exécutent sur celui-ci.

Deux solutions possibles:

  • geler votre fenêtre, c'est recaler tous les messages WM_PAINT en la fenêtre est Redimensionnement/minimiser/traîné. Vous pouvez également faire ceci en utilisant une sorte de drapeau (lockRedraw) ou similaire.

    • changer la priorité ne vous aidera pas, il pourrait même augmenter le problème bien que je ne sais pas quoi que ce soit au sujet de la stratégie de planification des wxp.

Edit: a oublié la deuxième solution réelle:

  • utiliser des tampons plus grands pour votre audio. Si vous pouvez passer un tampon peut-être la moitié ou un plein secondes à la carte son d'un seul coup, vous devez absolument être sur le côté sécuritaire dans un environnement multithread

remodifier: eh bien je perdre de vue que vous Sayd tout fenêtre. Seule la solution 2, utilisant des tampons plus grands, pourrait y aider. Les tampons sonores sont généralement placés dans un tampon sur le matériel, et dès qu'ils sont là, il ne devrait pas y avoir de problème.

Une autre possibilité vient à l'esprit: Ces animations sont recouvertes de sons. Vérifiez quel type de son vous avez mis en place pour maximiser/minimiser. Éteignez et réessayez

Si le problème persiste, cela peut être dû à un pilote de carte graphique défectueux. Si ce n'est pas le cas, vérifiez si les réglages de votre son (peut-être directSound? Ne sait pas) sont tous en ordre.Il y a peut-être un conflit de ressources que vous pouvez coder. (Pas dans le gestionnaire de matériel, mais dans votre façon d'accéder au périphérique audio.)

+0

ok. La dernière édition vient sous forme de commentaire: Je viens de me rappeler, que les sons sont joués indépendamment de l'animation, et vous avez dit que cela fonctionnait alors. Est-ce que les animations dopent votre cpu? – AndreasT

+0

La deuxième solution semble être plus probable. (Spy ++ a montré environ 3-6 messages de peinture par minute/restauration) Oui, j'utilise des tampons dsound/software. Les buffers audio plus gros peuvent aider, mais le problème général est que les autres threads fournissant l'audio à dsound sont suspendus - Transférer la voix en temps réel. –

+0

Non. L'UC est inactive pendant les animations de Windower. –

Questions connexes