Tout d'abord, ma question: Comment gérez-vous votre iOS de l'Exécution de la Boucle?
À côté de ma raison: j'ai fait des recherches ce avec une variété de prototypes (v. stade précoce de développement) et ont trouvé un certain nombre de problèmes qui rendaient perplexe.
- Tout d'abord, d'entrée de questions et l'exécution de la boucle de me conduire à essayer ce qui suit:
- lors de l'utilisation la plus recommandée pour le système (CADisplayLink) j'ai noté que certaines des entrées tactiles sont supprimés une fois que la charge CPU causes de la mémoire tampon flip (presentRenderBuffer), avoir à attendre un cadre. Cela se produit uniquement sur l'appareil et non dans le simulateur (fâcheusement - ce qui semble être liée à attendre vsync blocage sur le thread principal et le moyen de l'application d'exécution de la boucle du processus de saisie tactile & mange des messages)
- lors de l'utilisation la plus recommandée pour le système (NSTimer) j'ai noté que certaines des entrées tactiles sont supprimés une fois que la charge CPU atteint un certain point dans le simulateur, mais pas dans l'appareil (aussi fâcheusement). NSTimer également des résultats en beaucoup plus faible précision lors de mes mises à jour de l'incendie
- lors de l'utilisation de la moins recommandée pour le système (l'exécution de l'exécuter en boucle dans son propre thread géré à l'interne avec une haute précision de la minuterie construit à partir de mach_absolute_time, tous mes contact d'entrée problèmes disparaissent, cependant AFFIRMER mon code maintenant les pièges dans le mauvais thread et que si je usleep la suite de l'interruption logicielle. (Affirmer mon code est similaire à http://iphone.m20.nl/wp/?p=1) j'aime avoir mes affirmer code piège immédiatement à la ligne qui a provoqué le problème, donc cette solution n'est pas vraiment réalisable pour moi: plus difficile à déboguer.
- Deuxièmement, le temps perdu:
- alors qu'il enquête sur le système, j'ai constaté que, indépendamment de framerate (bizarrement, mais je suppose que statistiquement il a encore un sens w/vsync) je suis en attente d'environ 22% du temps sur la vsync. J'ai confirmé cela en se déplaçant autour de la glFlush/glFinish et en jouant avec la façon dont souvent je ne le presentRenderBuffer appels. C'est la clé du temps que j'aimerais être le traitement de l'IA, etc plutôt que de simplement caler sur un blocage gl appel. La seule façon que je peux penser autour de ce passerait rendu dans son propre thread, mais je ne sais pas si c'est justifié pour commencer à re-création de l'architecture multi-threading sur un seul processeur de l'appareil.
Si quelqu'un a trouvé une solution magique autour de ces questions? Quelqu'un aurait-il un tueur de l'exécution de la boucle de l'architecture qui est kick-ass sur cette plate-forme? Au moment où il regarde comme je dois choisir le moindre des maux.