2009-08-10 4 views
1

Je me demande juste pourquoi j'ai enregistré une fonction atexit ... par ex.Comment vous assurer que la fonction atexit enregistrée fonctionnera avec AppHelper.runEventLoop() dans PyObjC?

import atexit 
atexit.register(somefunc) 
... 
AppHelper.runEventLoop() 

Bien sûr, je sais quand atexit ne fonctionnera pas. Quand je commente AppHelper.runEventLoop() la fonction atexit est appelée. J'ai aussi mon pyobjc parcouru oeuf, et je vis sous __init__.py sous emballage objc le code suivant:

import atexit 
atexit.register(recycleAutoreleasePool) 

Je l'ai cherché toute référence dans l'œuf en vain. J'ai également essayé d'entourer un shell try-finally autour de AppHelper.runEventLoop(), et les commandes du bloc finally ne seront pas appelées.

J'espère que quelqu'un pourrait m'aider ici.

P.S. En supposant que je ne veux pas utiliser la méthode du délégué de l'application applicationShouldTerminate: ...

Répondre

1

Je crois que vous avez besoin des délégués, car sinon la boucle d'événement peut quitter le processus assez brusquement (un peu comme os._exit) et donc pas donner le temps d'exécution Python une chance d'exécuter le code de terminaison tel que finally clauses, atexit fonctions, etc

Questions connexes