2010-11-27 5 views
2

Quel est le plus rapide je peux courir un NSTimer et toujours obtenir des résultats fiables? J'ai lu que près de 30 ms ça commence à devenir inutile, alors où ça "commence à devenir inutile" ... 40ms? 50ms? Dépend du type de résultat que vous essayez d'obtenir.Quel est le plus rapide je devrais courir un NSTimer?

+0

Les minuteries à répétition et à fonctionnement rapide doivent être évitées; ils ont tendance à consommer de la pâte et à laisser votre demande sans réponse. – bbum

+0

duplication possible de [Utilisation d'un NSTimer à haute fréquence?] (Http://stackoverflow.com/questions/4289588/using-an-nstimer-at-high-frequencys) –

+0

@bbum "exécution rapide, répétition des temporisateurs à éviter "... faites-vous référence à des instances de NSTimer, ou à un problème de conception? Aussi, existe-t-il une alternative plus rapide à NSTimer? Je dois aller plus vite que le CADisplayLink 60fps pour sortir du MIDI. –

Répondre

4

Say the docs:

la résolution efficace du temps intervalle pour une minuterie est limitée à sur l'ordre de 50-100 millisecondes

Sonne comme si vous voulez soyez prudent, vous ne devriez pas utiliser les minuteurs en dessous de 0,1 sec. Mais pourquoi ne pas essayer dans votre propre application et voir à quel point vous pouvez aller bas?

Vous ne trouverez aucune garantie à ce sujet. Les NSTimers sont opportunistes par nature puisqu'ils s'exécutent avec la boucle d'événements, et leur granularité la plus efficace dépendra de tout ce qui se passe dans votre application en plus des limites de tous les mécanismes de répartition de la minuterie Cocoa.

+0

Merci pour ça. Y at-il une méthode recommandée pour aller plus vite que cela, en dehors de l'écriture de mon propre en utilisant GCD? –

+1

@DanRosenstark (6 ans plus tard ...) Cela dépend de ce que vous en avez besoin. 'CADisplayLink' semble être à 60 secondes de la fin, avec quelques restrictions sur le timing de l'affichage, puisque c'est pour ça. Si vous avez besoin de quelque chose de garanti en temps réel, ou super précis, vous devriez poser une nouvelle question sur la meilleure approche. Bonne chance! –

2

Quelle est votre définition de fiable? Une erreur de 16 ms dans une temporisation de 1 seconde est inférieure à 2% d'erreur, mais dans une temporisation de 30 ms, elle est supérieure à 50% d'erreur. NSTimers attendra que tout ce qui se passe dans la boucle d'exécution en cours se termine et toutes les erreurs de temps peuvent s'accumuler. par exemple. Si vous touchez l'écran N fois, toutes les tirs NSTimer répétés suivants peuvent être en retard par le temps cumulé pris par les manipulateurs tactiles 0 à N (plus tout ce qui a fonctionné à la "mauvaise" heure). etc.

Les temporisateurs CADisplayLink tenteront de quantifier le temps à la fréquence d'images, en supposant qu'aucun ensemble de tâches de premier plan ne dure aussi longtemps qu'un temps de trame.

Questions connexes