We had intended to include proper pthread_cancel() support in Jaguar/Darwin 6.0. However, we ran into too many places throughout the rest of libSystem and the other Mac OS X framework libraries that would be broken by true ASYNCHRONOUS pthread_cancel() use. Rather than enable a tool that would break the application/frameworks at random times, we left it disabled.
We have been working on a plan to "safely" enable it for another future release. In our view, we need at least libSystem cancel-safety to turn it on at all.
Contrairement à ce qu'on disait au dessus, gérer ses threads avec la bibliothèque POSIX n'est pas si compliqué que ça... Il faut juste lancer un thread vide avec "detachNewThreadSelector:toTarget:withObject:" au début de l'application pour la mettre en mode multi-threadée et après on fait ce qu'on veut avec la bibliothèque qu'on veut.
Je suis en train de faire des tests dessus, mais je n'arrive pas à faire fonctionner "PTHREAD_CANCEL_ASYNCHRONOUS" >:( Par contre, "PTHREAD_CANCEL_DEFERRED" avec des "pthread_testcancel" dans le code fonctionne très bien.
Tu implémentes ça comment ? tu refais une classe thread qui encapsule les threads posix ?
Mais en enlevant le "pthread_testcancel" ça ne fonctionne plus ; donc il faut quand même mettre régulièrement des "cancellation points" (même si on s'assure que son thread est cancel-safe)
Tout ça parce qu'ils ont codé leurs Framework comme des cochons !
Réponses
À savoir dans quel thread on est à un moment donné...
Déjà , oui
Mais pas seulement...
Et ça date !
http://lists.apple.com/archives/darwin-development/2002/Sep/msg00046.html
Tu implémentes ça comment ?
tu refais une classe thread qui encapsule les threads posix ?
Non, directement...
Mais en enlevant le "pthread_testcancel" ça ne fonctionne plus ; donc il faut quand même mettre régulièrement des "cancellation points" (même si on s'assure que son thread est cancel-safe)
Tout ça parce qu'ils ont codé leurs Framework comme des cochons !