首先介绍一个指标的方法,使用signal替代cancel调用:
当worker thread超时时,在主线程(或者是监视进程)中调用
在worker thread中加入对SIGUSR1信号的处理
最根本的解决方法是重写worker thread,使用poll或者select等处理IO操作防止stuck的发生,下面是Android源码system/libsysutils/src/SocketListener.cpp的处理方法
1,创建worker thread前先创建通讯管道
2,在worker thread的大循环中使用select同时监控管道和IO fd
3,需要退出时通过管道通知worker thread