如何退出线程

Linux·C/C++终止线程的方法 四种终止线程的方法 阅读详情

      之前对于线程如何退出一直不是特别清楚,以前发现用pthread_kill函数退出线程没有效果,今天看了一些别人的博客才发现线程退出的原理,而且pthread_kill函数只是向特定的线程发信号。下面是一些如何在死循环中结束线程的方法。

       第一:可以利用pthread_kill函数向线程发信号,而后在信号处理函数里面设置一个flag,当线程中检测到该该flag置位后退出死循环,结束线程。

       pthread_kill(pthread_t tid,int sig)

       第一个参数为需要kill的线程的线程id,第二个参数为信号。注意,信号为SIGQUIT,但线程未处理该信号会导致线程所在的进程退出。

       第二:可以使用pthread_cancel函数向需要退出的线程发送CANCEL信号,然后在线程中使用pthread_testcancel函数检测是否有CANCEL信号发过来。收到该信号就可以直接退出了。

        pthread_cancel(pthread_t tid); 向线程发送CANCEL信号。

        pthread_testcancel();检测是否收到CANCEL信号。

        另外可以用下列函数可以设置如何退出线程。   

 

             int pthread_setcancelstate(int state,   int *oldstate)   
            设置本线程对Cancel信号的反应,state有两种值:PTHREAD_CANCEL_ENABLE(缺省)和PTHREAD_CANCEL_DISABLE,
        分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行;old_state如果不为NULL则存入原来的Cancel状态以便恢复。  

            int pthread_setcanceltype(int type, int *oldtype)   
            设置本线程取消动作的执行时机,type由两种取值:PTHREAD_CANCEL_DEFFERED和        PTHREAD_CANCEL_ASYCHRONOUS,    仅当Cancel状态为Enable时有效,分别表示收到信号后继续运行至下一个取消点再退出和立        即执行取消动作(退出);oldtype如果不为NULL则存入运来的取消动作类型值。  

        第三:pthread_exit函数,这个是线程主动退出。

python子线程退出及线程退出控制的代码 @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要介绍了python子线程退出及线程退出控制的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: def thread_func(): while True: #do something #do somethin... 阅读详情

相关推荐

线程问题的核心: 怎么退出线程才是合适的

本文探讨了线程退出的多种方式及其区别。作者通过实验分析发现:1)main函数中使用return 0与exit(0)在程序退出效果上基本相同;2)pthread_exit虽能正常退出线程,但作为主线程退出方式可能导致资源泄漏;3)pthread_cancel设置取消标志后,线程需达到取消点才会终止,可通过pthread_testcancel主动触发。文章还深入剖析了相关系统调用源码实现,指出线程退出机制的关键在于正确处理清理函数和资源释放。最后强调理解内部原理对构建优秀架构的重要性,并提供了多种线程安全退出的

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 1万+

嵌入式笔记Linux ——《线程》

线程概述: 每个进程都拥有自己的数据段、代码段和堆栈段,这就造成进程在进行创建、切换、撤销操作时,需要较大的系统开销。 为了减少系统开销,从进程中演化出了线程。 线程存在于进程中,共享进程的资源。 线程是进程中的独立控制流,由环境(包括寄存器组和程序计数器)和一系列的执行指令组成。 每个进程有一个地址空间、和一个控制线程。 使用多线程设计实现高并发的效果(重点) 线程的基本操作 就像每个进程都有一个进程号一样,每个线程也有一个线程号。 进程号用pid_t数据类型表示,是一个非负整数。线程号则用pthrea

Dev_XH 's HOME 464

Android Qcom USB Driver学习(五)

在前面的第二期中,我们知道一些非标的USB的充电类型Floatingcharger,其具有和普通DCP相似的大电流能力,但在最初检测的时候会限制Inputcurrentlimit到100mA,来进行检测是否是SDP类型,所以要支持大电流输入就需要进行vote操作,前面的几篇都有涉及,所以本文学习一下pmicusbcharger都相关的vote机制。...

Android驱动开发 2901

pthread_kill()和pthread_cancel()的用法

为了讲述标题两个函数,必须先介绍一下pthread线程库。 pthread线程库是遵循POSIX标准开发的,工作非常稳定,性能也不差, 所以在Linux下是最常用的线程库。但从调用上看,pthread线程应该仍然属于用户级的线程库, 其实用户级还是内核级的关键区别只在于线程的调度是由内核还是用户库来完成,用户级对于 一般的服务器工作而言是没用问题的。 pthread_kill函数的功能是

jongden的专栏 1万+

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 227

相机标定原理与张氏标定法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

heeweii的博客 2280

进程和线程的退出

孤儿进程,僵尸进程,进程及线程的退出方式,如何判断进程或线程是否退出

weixin_51281362的博客 1403

【OpenArm|Control】openarm机械臂ROS2仿真控制

openarm_ros2 存储库包含用于 ros2_control 的包集合。 它抽象化了硬件控制,将手臂公开为接收位置、速度和扭矩命令并输出关节状态的接口。 openarm_bringup 包提供了通过包与 ROS2 控制框架集成的启动文件。该软件包提供启动文件和配置,用于启动硬件接口、加载控制器以及将物理臂连接到 ROS2 生态系统。启动后,您可以使用标准 ROS2 控制工具和接口来命令手臂并接收反馈。openarm_bringup bringup 包支持模拟硬件(用于模拟/测试)和通过硬件插件的真实

ai领域探索者,欢迎一起交流,目前从事具身智能行业。 2955

线程退出总结

线程结束

weixin_39451679的博客 2136

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5014

【华为OD技术面试手撕真题】25、验证IP地址 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

验证IP地址 华为od机试真题,华为OD技术二面,华为od机考,华为od手撕真题,华为od技术二面,华为od机试,华为OD机试的高频手撕代码题,华为od八股文

KJ.JK 4043

【Linux】主线程退出对子线程的影响

今天在看一些关于线程方面的文章时,觉得这篇文章讲得很不错,对于初学者对于线程的理解很有帮助,一方面想自己保存起来,另一方面希望更多人能看到。原文出处:简单了解C语言中主线程退出对子线程的影响 对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程。 那如果是把进程换成线程的话,会怎么样呢?假设主线程在子线程结束前就已经退出,子线程会发生什么? 在一些论坛上看到许多人说子线程也会跟着退出,其实这是

量变产生质变 4125

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 342

python判断线程退出_python子线程退出及线程退出控制的代码

下面通过代码给大家介绍python子线程退出问题,具体内容如下所示:def thread_func():while True:#do something#do something#do somethingt=threading.Thread(target = thread_func)t.start()# main thread do something# main thread do someth...

weixin_39767386的博客 1434

华为OD机试新系统真题-谁没交卷(Java /Py/C++/Go/C/Js)

华为OD机试 新系统真题【谁没交卷】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【谁没交卷】多语言题解。

qq_45776114的博客 421

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

多线程——线程的退出

一般来说,一个线程的退出,有多种方式: 1.return方式/exit/_exit 2.利用pthread_exit退出 3.利用phread_cancel 退出以下几种方式均可以让线程退出,但是相互间也是有区别的,下面通过实例来演示。 pthread_exit函数用于实现线程退出 头文件#include<pthread.h> 函数原型void pthread_exit(void *retval); 无返回值 参数列表 void *retval:返回的参数NULL ...

glory的博客 4685

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c#程序退出和线程退出

编写Winform程序时,发现在程序退出后,有的线程还在运行。 通过网上查看得知需要设置线程属性,如下程序所示: Thread th = new Thread(Get); th.IsBackground = true;//需要设置 这个属性的意思就是把线程设置为后台线程。 然后关闭进程的同时,线程也会随之关闭。 IsBackground对线程的重要作用 1、当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。 2、当主线

opencv220的博客 4315

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python多线程的退出控制

最近接 到一个抢票的爬虫外包,那个网站及其之捞,访问购票地址竟然还要排队,在购票高峰临时升一下服务器配置不行吗…没办法,甲方爸爸的要求还得做啊,其中一个障碍便是目标网站的后端限制了访问频次,俗话说:“上有政策,下有对策。” 立刻想到了多线程 + 多代理的方式进行访问。但此时问题便来了,多代理还好说,再写个爬虫爬一堆下来就好,多线程可就麻烦多了,多线程一旦发出去了,基本等同于失控的状态,你无法去结束或者是重启一个线程,最多只能是获取线程的信息,没有实际的控制权,而且Python官方也没有提供相应的结束函数。

Messy的小博客~~~ 5万+

python 线程退出_python线程退出

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 gil)。 也就是说,io 密集型的 python 程序比计算密集 型的程序更能充分利用多线程环境的好处。 退出线程当一个线程结束计算,它就退出了。 线程可以调用 thread.exit()之类的退出函数,...

weixin_39850981的博客 1332

Python线程退出控制

ctypes模块控制线程退出 Python中threading模块并没有设计线程退出的机制,原因是不正常的线程退出可能会引发意想不到的后果。 例如: 线程正在持有一个必须正确释放的关键资源,锁。 线程创建的子线程,同时也将被杀掉。 管理自己的线程,最好的处理方式是拥有一个请求退出标志,这样每个线程依据一定的时间间隔检查规则,看是不是需要退出。 例如下面的代码: import threading...

weoken 1万+

主线程退出对子线程的影响

http://originlee.com/2015/04/08/influence-of-main-threads-exiting-to-child-thread/ 目录 主线程先退出 主线程随进程一起退出 Linux线程模型 对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该...

Likes的博客 1546

【linux 多线程并发】线程退出自动清理函数的使用,释放线程申请的资源,异常退出自动调用

现代的CPU都是多core处理器,而且在intel处理器中每个core又可以多个processor,形成了多任务并行处理的硬件架构,在服务器端的处理器上架构又有一些不同,传统的采用SMP,也就是对称的多任务处理架构,每个任务都可以对等的访问所有内存,外设等,而如今在ARM系列CPU上,多采用NUMA架构,它将CPU核分了几个组,给每个组的CPU core分配了对应的内存和外设,CPU访问对应的内存和外设时速度最优,跨组访问时性能会降底一些。

一个追逐梦想的码农 8551

多线程环境下,主线程先退出,子线程会被强制退出吗?

1、进程中线程之间的关系 线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。 但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(…))。 main执行完之后, 会调用exit()。 exit() 会让整个进程over终止,那所有线程自然都会退出。 2、主线程先退出,子线程继续运行的方法 在进程...

现从事游戏开发领域 | 团队项目be_with开发进行中 web方向感兴趣者私 ——We can do all things. 3816

MFC 线程的退出方法

A.线程函数的返回(推荐用法)(需要考虑的是catch/运行标志/错误处理等方法) B.ExitThread函数(不推荐) C.同一个进程或者另一个进程中的线程调用TerminateThread函数(应该避免这种方法) D.包含线程的进程终止(应该避免使用这种方法) 线程函数的返回可以确保线程中的C++对象被撤销函数正确的撤销,操作系统正确的释放线程堆栈所使用的内存,系统将线程的退出...

u011555996的博客 2978

python线程退出_python子线程退出及线程退出控制的代码

下面通过代码给大家介绍python子线程退出问题,具体内容如下所示:def thread_func():while True:#do something#do something#do somethingt=threading.Thread(target = thread_func)t.start()# main thread do something# main thread do someth...

weixin_39682560的博客 192
上一篇: 哈希表
下一篇: Android binder机制学习总结
张伟字益达
博客等级 码龄12年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值