当前位置:  技术问答>linux和unix

【求助】在主线程里如何终止子线程的执行?

    来源: 互联网  发布时间:2015-12-12

    本文导语:  示例代码如下: #include  #include  #include  #include  void* func(void *) { while (1)   { ; } return NULL; } int main(int argc, char *argv[]) { pthread_t thrd; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD...

示例代码如下:
#include 
#include 
#include 
#include 

void* func(void *)
{
while (1)  
{
;
}
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t thrd;

pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

if ( pthread_create(&thrd, &attr, func, NULL) )
{
perror("pthread_create error");
exit(EXIT_FAILURE);
}

if ( !pthread_cancel(thrd) )
{
printf( "pthread_cancel OKn" );
}

sleep( 10 );
return 0;
}

//pthread_cancel执行成功了,但是子线程仍然在内存里运行,请问这是为什么呢?

|
很多POSIX多线程标准函数在LINUX上不被支持,你仔细查一下这个函数在LINUX上是否被支持!!!!!

|
LINUX上有直接杀死子线程的函数么?

我记得是无。。。。。。楼主仔细查下

|
看看pthread_cancel的man,这个函数是在一些等待函数中才能中断的。
你把while(1){;}当中改成sleep(1)看看。

|
只能使用pthread_cancle.
如果强制杀掉的话,这个线程里的资源谁去释放?如果有互斥锁话就有可能造成死锁。

|
是因为这样的!
在posix thread中线程有两中取消状态:立即取消和延迟取消
立即取消就是pthread_cancel之后,不管理线程在干什么,马上终止这个线程
而延迟取消是在pthread_cancel之后,线程会继续运行,直到遇到一个"取消点函数"
系统默认的是延迟取消

象在你的这个线程中,根本就没有取消点函数,所以你这个线程是不会结束的.

如果想要结束线程有几个方法
1.不线程设置为立即取消
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); 
2.在你的线程中加入一些取消点函数的调用
while( 1 )
{
//sleep(1)或者pthread_testcancle();
}



    
 
 

您可能感兴趣的文章:

  • 紧急求助java多线程编程!!!!!!!!!!!!!
  • 求助,线程的回收
  • socket实现多文件并发传输,求助多线程实现问题?
  • 求助Linux下怎样查看线程状态?
  • 线程内部的errno问题求助
  • Opengl Linux多线程 求助
  • 求助多线程问题
  • 求助:Linux下线程编程的问题~~~~~~~~~~~~~~~~~~~`
  • 求助:关于单线程recv时的超时问题
  • 求助!Linux下socket编程,服务端与多线程的问题
  • ■■求助■■ 如何查看一个进程拥有的线程数量???
  • 求助!Linux多线程问题
  • 求助!!!多线程+多个epoll_wait问题
  • 求助!pthread与Win32 API线程库的对应问题
  • 【求助】如何使运行中的线程挂起?
  • 论坛 iis7站长之家
  • (100分求助)用内核线程对用户进程操作(大侠/虾们出手了)
  • 求助!关于多线程下数据库操作的问题,请大家帮忙看看
  • MM求助:怎样多线程下载http://java.sun.com上的东东? 用http方式,谢谢了.
  • 求助:阻塞socket在多线程情况下的防护问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助:请问怎么获得在个一个脚本中执行的另外个脚本的返回结果,如执行成功或失败
  • 求助.sh文件执行报错问题
  • 【求助】如果在一个文件内执行多条语句(批处理)
  • 求助:在Window系统中去连上Solaris系统并执行VMSTAT返回结果
  • gtk编程求助:程序里打开了一个子窗口,如何等子窗口关闭后再继续往下执行?
  • 【求助】如何同时连接并登录多个服务器,然后执行相同的维护脚本
  • [求助]solaris root用户无法执行命令的问题
  • [求助]这个目录下的文件,如何执行啊??
  • 编译连接成功,但不能执行!!求助!!!
  • 求助:我怎么生存 像 windows 下的 exe 可执行文件啊?谢谢!
  • 哪位大虾知道lsof的执行流程?高分求助~~~~~~~~~
  • 求助,远程登录linux后,怎么自动执行一些命令
  • 求助:mount 执行失败!多谢!
  • 【求助】system()命令执行失败,请高手帮忙解决,谢谢!
  • [求助]Linux下如何在Shell Script中实现在某特殊时间点,批量执行脚本指令?(在线等回复)
  • 疑惑求助:unix线程执行被异步中断后的问题
  • C语言中执行shell脚本出错(菜鸟求助)
  • 求助呀,我们的HP-UNIX的服务器经常发现有文件被恶意删除。有查询用户执行命令的记录日志吗,感谢了!
  • 关于java和jsp的执行问题求助
  • [求助]一个不知道执行长度的任务怎么用JProgressBar来表示呀
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3