Возможный вариант, который работает для этого парня: http://igourd.blogspot.com/2009/05/work-around-on-pthreadcancel-for.html
Перепост здесь в случае:
Затем я использую pthread_kill, чтобы вызвать
SIG_USR1 сигнал и использовать обработчик сигнала
выйти из этого потока и попробовать
работает, но все еще интересно, если таковые имеются
недостатки этого метода.
Таймер:
if ( (status = pthread_kill(pthread_id, SIGUSR1)) != 0)
{
printf("Error cancelling thread %d, error = %d (%s)", pthread_id, status, strerror status));
}
Обработчик 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);
}
Похоже, лучший ответ - переписать, чтобы потоки не ожидали ввода-вывода: http://groups.google.com/group/android-platform/browse_thread/thread/0aad393da2da65b1