Domanda

Sto portando un corpo di medie dimensioni di codice C ++ su Android NDK. Sfortunatamente l'implementazione di PThreads (a partire da NDK V5, comunque) è incompleta. In particolare, la nostra applicazione si basa su pThread_cancel () per uccidere un thread del lavoratore. NDK non implementa pThread_cancel ()! Ci sono altre risposte ovvie quando il thread del lavoratore risponde normalmente. Ma nei casi in cui il thread del lavoratore non risponde (ad es. Infinite Loop), come posso annullarlo senza uccidere l'intero processo?

È stato utile?

Soluzione

Opzione possibile che funziona per questo ragazzo: http: //igourd.blogspot.com/2009/05/work-around-on-pthreadcancel-for.html

rinnovo di qui nel caso in cui:

  

Poi uso pthread_kill per innescare un   SIG_USR1 del segnale e gestore di segnale uso   per uscire pthread e provato, esso   funziona, ma ancora chiedendo se del caso   svantaggi di questo tipo di metodo.

Timer out:

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

handler 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);
}

appare come la risposta migliore è quella di riscrivere in modo che le discussioni non sono in attesa di Io: http://groups.google.com/group/android-platform/browse_thread/thread/0aad393da2da65b1

Altri suggerimenti

Ho fatto una piccola biblioteca che si occupano di questo.

Sfrutta alcuni bit non utilizzati della struttura filettata bionico.

L'ho chiamato libbthread :)

Godere;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top