5 votes

Comment fonctionne une boucle d'exécution

Au début du mois, j'ai posé la question suivante Qu'est-ce qu'une boucle d'exécution ? Après avoir lu les réponses et fait quelques essais, j'ai réussi à le faire fonctionner, mais je ne le comprends toujours pas complètement. Si une runloop est juste une boucle associée à un thread et qu'elle ne génère pas d'autre thread dans les coulisses, comment l'autre code dans mon thread (mainthread pour rester simple) peut-il s'exécuter sans être "bloqué"/ne pas s'exécuter parce qu'il fait quelque part une boucle infinie ?

C'était la première question. Je passe maintenant à la deuxième.

Si j'ai bien compris, après avoir travaillé avec cela, mais sans l'avoir complètement compris, un runloop est une boucle dans laquelle vous attachez des "drapeaux" qui notifient au runloop que lorsqu'il arrive au point où se trouve le drapeau, il "s'arrête" et exécute n'importe quel handler qui est attaché à ce point ? Ensuite, il continue à courir jusqu'au point suivant de la file d'attente.

runloop

Ainsi, dans ce cas, aucun événement n'est placé en file d'attente dans les connexions, mais lorsqu'il s'agit d'événements, il prend l'action associée au robinet 1 et l'exécute avant de passer à nouveau aux connexions, et ainsi de suite. Ou suis-je loin d'avoir compris le concept ?

1voto

bbum Points 124887

"En quelque sorte".

Avez-vous lu cette documentation particulière ?

Il approfondit considérablement - de manière très approfondie - l'architecture et le fonctionnement des boucles d'exécution.

1voto

hotpaw2 Points 40796

Une boucle d'exécution volonté est bloqué s'il envoie une méthode qui prend trop de temps ou qui boucle indéfiniment.

C'est la raison pour laquelle une application iPhone voudra faire tout ce qui ne tient pas dans un "tick" de la boucle d'exécution de l'interface utilisateur (par exemple à une certaine fréquence d'images d'animation ou de réponse de l'interface utilisateur), avec de la place pour tous les autres gestionnaires d'événements qui doivent être exécutés dans ce même "tick", soit de manière asynchrone, soit en les confiant à un autre thread pour leur exécution.

Sinon, les choses resteront bloquées jusqu'à ce que le contrôle soit rendu à la boucle d'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X