1

Le fil principal de mon application affiche un film au début, alors que d'autres threads effectuent des tâches d'arrière-plan. Cependant, certains utilisent PerformSelectorInMainThread pour faire certaines choses. Ce qui arrive, c'est que parfois le film reste bloqué indéfiniment, parfois non, et parfois se libère après quelques secondes. J'essaie de le déboguer, mais quand je mets XCode en pause alors que l'application est bloquée, tout ce que je vois est le code d'assemblage et je ne peux pas vraiment comprendre quoi que ce soit. (Je suppose que quelque chose comme "symboles" sur les fenêtres serait cool) Existe-t-il un moyen d'analyser plus en détail ce qui est en cours d'exécution sur le thread principal et pourrait bloquer ma vidéo pendant qu'il joue? En outre, comment se fait-il que la vidéo reste bloquée, si je lis une vidéo du thread principal alors que d'autres threads appellent PerformSelectorInMainThread, ce qui se passe réellement (je supposais qu'il ajouterait le sélecteur comme un événement mais ne dérangerait pas le film de jouer jusqu'à la fin)?MPMoviePlayerController Problème de verrouillage de thread - Développement Iphone

Merci pour votre aide !!

Répondre

0

Avez-vous essayé d'utiliser Shark (l'un des outils Instruments) pour analyser des échantillons?

Lorsque les choses se "bloquent", cela signifie probablement que le processeur tourne. Shark échantillonne le CPU de temps en temps (enfin, en termes humains, très souvent) pendant une courte rafale (je le garderais sous 5 à 10 secondes) et vous indique le pourcentage du temps que le CPU passe sur quelles tâches.

Il fait exactement ce que vous mentionnez - reverse engineering tout le code d'assemblage pour ressembler plus au débogueur (enfin, pas 100%, mais assez). Ce serait la première étape - identifier la tâche lourde du processeur que votre code performSelectorOnMainThread: appelle qui provoque la gomme de la vidéo. Puis, une fois que vous savez de quoi il s'agit - la réponse sera soit évidente - soit vous devrez changer d'architecture :)

+0

Puis-je savoir à l'aide de shark quelles sont les longues tâches appelées sur un thread spécifique? dans mon cas, le fil principal. – Idan

+0

Je ne suis pas sûr que ce soit spécifique au thread. Je le crois. – makdad