不提倡强制杀死线程,当我们的一个线程获取了一个锁,正在访问某个共享方法的时候,还没来得及解锁就被干掉了,那这个锁就永远不会被解掉了,于是所有依赖这个锁的其它线程可能就锁死了。

android的ndk中没有提供类似linux的pthread_cancel函数来杀死线程。

#include <jni.h>
#include <string>
#include<pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include "Logger.h"pthread_t pid;void handle_quit(int signo) {LOGE("hxk>>>in qq handle sig!\n");pthread_exit(0);
}void *test(void *arg) {signal(SIGTERM, handle_quit);for (int i = 0; i < 100; i++) {LOGE("hxk>>>in pthread test \n");sleep(1);}}void test1() {pthread_create(&pid, NULL, test, NULL);sleep(3);if (pthread_kill(pid, 0) != ESRCH) {LOGE("hxk>>>thread %d exists!\n");pthread_kill(pid, SIGTERM);//        pthread_kill(pid, SIGQUIT);//无法杀死线程
//        pthread_kill(pid, SIGKILL);//无法杀死线程
//        pthread_exit(NULL);//this won't workLOGE("hxk>>>after kill\n");}sleep(1);
}

可以看到当我们调用test1函数的时候,log如下:

08-15 20:05:15.681 6742-6762/com.supper.xkplayer E/xkplayer: hxk>>>in pthread test
08-15 20:05:16.681 6742-6762/com.supper.xkplayer E/xkplayer: hxk>>>in pthread test
08-15 20:05:17.682 6742-6762/com.supper.xkplayer E/xkplayer: hxk>>>in pthread test
08-15 20:05:18.681 6742-6761/com.supper.xkplayer E/xkplayer: hxk>>>thread -674265880 exists!
08-15 20:05:18.682 6742-6761/com.supper.xkplayer E/xkplayer: hxk>>>after kill
08-15 20:05:18.682 6742-6762/com.supper.xkplayer E/xkplayer: hxk>>>in qq handle sig!

从log中可以看到,循环中的log没有继续执行了,子线程已经被杀死了。

ndk中杀线程的办法相关推荐

  1. java让线程空转_详解Java编程中对线程的中断处理

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时--都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  2. Delphi中的线程类

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...

  3. ora-00031:session marked for kill处理oracle中杀不掉的锁

    转: 一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE ...

  4. OpenMP在ARM-Linux以及NDK中的编译和使用

    OpenMP在ARM-Linux以及NDK中的编译和使用 参考:http://blog.sina.com.cn/s/blog_602f87700102w1ki.html 以前对OpenCV在ARM-L ...

  5. 【转】ora-00031:session marked for kill处理oracle中杀不掉的锁

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

  6. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  7. ORA-00031: session marked for kill 处理Oracle中杀不掉的锁

    转自:http://bbs.erp100.com/thread-5934-1-1.html marked 一些ORACLE 中的进程被杀掉后,状态被置为"killed",但是锁定的 ...

  8. python脚本自动运行失败_解决Python中定时任务线程无法自动退出的问题

    python的线程有一个类叫Timer可以,用来创建定时任务,但是它的问题是只能运行一次,如果要重复执行,则只能在任务中再调用一次timer,但这样就存在新的问题了,就是在主进程退出后,不能正常退出子 ...

  9. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

最新文章

  1. 【教程】2、读取新闻条目
  2. linux共享文件丢失,【干货分享】linux平台下数据文件被误删后,如何及时得知并进行恢复...
  3. 价格走势PHP源码,php多币种区块链交易所源码 存取功能齐全+最新价格走势正常...
  4. Python编程基础:第十二节 嵌套循环Nested Loops
  5. SEL selector (二)
  6. Java obj与JSON互转(jackson)
  7. 清华大学发布10大机器翻译学习必读论文清单 | 资源
  8. LVM逻辑卷分区笔记
  9. 前格式 直接将转换为当_如何将word转化为PDF格式?1分钟学会文档转换
  10. 《Java编程思想》读书笔记-对象导论
  11. MVC使用jQuery从视图向控制器传递Model的2种方法
  12. 《黑马程序员Android移动应用基础教程》学习笔记(1)
  13. 测试职业发展前景之职业发展方向
  14. 无线网络经常掉线?默认网关不可用?试试这个办法
  15. 一个手机号码可以申请二个微信号吗?如何申请?
  16. js php活动倒计时,JS活动倒计时代码
  17. v-for错误:应为数组元素析构模式
  18. Tesseract学习(四)
  19. 【侯捷】C++内存管理从平地到万丈高楼(前11节学习笔记)
  20. vue打测试包和正式包的配置

热门文章

  1. Bailian2937 异常细胞检测【水题】
  2. UVA10189 Minesweeper【Ad Hoc】
  3. 《诗经》诗无邪 —— 雅篇
  4. 图像、视频等文件类型(拓展名)
  5. 公司(企业与市场)与商业模式
  6. windows 用户管理
  7. Python 标准库 —— xml
  8. MapReduce 原理及执行过程
  9. CentOs虚拟机NAT模式下静态IP的配置
  10. sklearn 细节 —— SGDClassifier、Perceptron(分类模型)