Question

Je suis PORTAGE un corps de taille moyenne du code C ++ pour Android NDK. Malheureusement, la mise en œuvre pthreads (au NDK v5, de toute façon) est incomplète. Plus précisément, notre application repose sur pthread_cancel () pour tuer un thread de travail. NDK ne met pas en œuvre pthread_cancel ()! Il y a d'autres réponses évidentes lorsque le thread de travail est normalement répondre. Mais dans les cas où le thread de travail ne répond pas (par exemple boucle infinie), comment puis-je annuler sans tuer tout le processus?

Était-ce utile?

La solution

Option possible qui fonctionne pour ce type: http: //igourd.blogspot.com/2009/05/work-around-on-pthreadcancel-for.html

Republier ici au cas où:

  

Puis-je utiliser pthread_kill pour déclencher une   le signal SIG_USR1 et l'utilisation gestionnaire de signaux   pour quitter ce pthread et essayé, il   fonctionne, mais toujours demander le cas échéant   inconvénients pour ce genre de méthode.

minuterie sur:

if ( (status = pthread_kill(pthread_id, SIGUSR1)) != 0) 
{ 
    printf("Error cancelling thread %d, error = %d (%s)", pthread_id, status, strerror status));
} 

gestionnaire USR1:

struct sigaction actions;
memset(&actions, 0, sizeof(actions)); 
sigemptyset(&actions.sa_mask);
actions.sa_flags = 0; 
actions.sa_handler = thread_exit_handler;
rc = sigaction(SIGUSR1,&actions,NULL);
void thread_exit_handler(int sig)
{ 
    printf("this signal is %d \n", sig);
    pthread_exit(0);
}

On dirait que la meilleure réponse est de réécrire afin que les fils ne sont pas en attente sur IO: http://groups.google.com/group/android-platform/browse_thread/thread/0aad393da2da65b1

Autres conseils

J'ai fait une petite bibliothèque qui prennent soin de cela.

Il exploite certains bits non utilisés de la structure de fil bionique.

Je l'ai appelé libbthread :)

Profitez;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top