最近用QT做界面,通过点击按钮开启多个线程,但由于多个子线程运行时间较长,导致了界面出现假死现象

原因:多线程创建后直接使用了pthread_join从而导致了程序一直停在这里

解决方法:在使用pthread_join之前,使用pthread_detach操作即可

具体原因请看一下解释(从网上找的,但真的起作用了):

在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。

默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用pthread_detach函数被分离。

[cpp]
int pthread_join(pthread_t tid, void**thread_return); 
                                 若成功则返回0,若出错则为非零。

int pthread_join(pthread_t tid, void**thread_return);
                                 若成功则返回0,若出错则为非零。    线程通过调用pthread_join函数等待其他线程终止。pthread_join函数分阻塞,直到线程tid终止,将线程例程返回的(void*)指针赋值为thread_return指向的位置,然后回收已终止线程占用的所有存储器资源。[cpp] view plaincopyprint?int pthread_detach(pthread_t tid); 
                                 若成功则返回0,若出错则为非零。

int pthread_detach(pthread_t tid);
                                 若成功则返回0,若出错则为非零。

pthread_detach用于分离可结合线程tid。线程能够通过以pthread_self()为参数的pthread_detach调用来分离它们自己。
    如果一个可结合线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收,所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源。

由于调用pthread_join后,如果该线程没有运行结束,调用者会被阻塞,在有些情况下我们并不希望如此。例如,在Web服务器中当主线程为每个新来的连接请求创建一个子线程进行处理的时候,主线程并不希望因为调用pthread_join而阻塞(因为还要继续处理之后到来的连接请求),这时可以在子线程中加入代码

pthread_detach(pthread_self())

或者父线程调用

pthread_detach(thread_id)(非阻塞,可立即返回)

这将该子线程的状态设置为分离的(detached),如此一来,该线程运行结束后会自动释放所有资源。

使用pthread后,界面假死现象问题相关推荐

  1. hibernate运行一段时候后出现假死现象

    最近在维护一个外包遗留下的Hibernate+spring+spring mvc的一个项目,发现该项目运行一段时间后,发现APP请求后一直处于等待状态,直到请求超时,于是调试跟踪了一下,发现是操作数据 ...

  2. java win10窗口启动假死_window执行jar包会出现假死现象解决

    windows jar包启动的几种方式介绍 java -jar xxx.jar(jar包的路径),最普通简单的方式,通过windows的命令行窗口启动,并在命令行窗口运行,输出.可以在启动的时候增加参 ...

  3. cisco交换机端口“假死”现象

    "假死"现象蔓延 不得不根治? 但是最近几天单位那台连接数字电视前端系统的交换机上也出现了端口"假死"的现象,故障原因很快查清了:是因为该端口下面连接的一台交换 ...

  4. 教你几招解决电脑假死现象

    不少电脑使用者在平常的生活中,都遇到过电脑"假死"的现象,也就是长时间卡机不动,点击什么都没反应.这让我们很无奈,尤其是在工作中,文档写了一半,突然死机,运气好还能恢复,运气不好的 ...

  5. 【教程】完美解决windows10磁盘占用100%并出现卡顿、假死现象

    本文原始地址为:http://tieba.baidu.com/p/4359125660 欢迎浏览我的博客:https://fitz1318.top/ lz自从上win10以来经常会出现这种情况:磁盘突 ...

  6. tomcat 假死现象(转)

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台 ...

  7. qt开启线程界面假死问题解决

    一.前言 在 使用qt高速读取传感器数据时,如果想要将数据实时刷新在界面,就需要开启一个线程单独去跑读取数据函数,并反馈给主程序,否则在主程序中读取和刷新界面会很卡很卡,但是在开启多线程,无外接鼠标键 ...

  8. ubuntu文件管理器打不开,出现假死现象的解决办法记录

    ubuntu文件管理器打不开,出现假死现象的解决办法记录 无论新建多少窗口,多少次双击一直出现这种文件管理器界面,一直进不去. 经了解, 一般是nautilus出错了,才出现假死现象,可以卸载之后重新 ...

  9. java程序假死_分析一个常见的java多线程通信问题(假死现象)

    一件复杂的事,一个人如果不能做,两个人又做的不好,一群人就可能很好的解决了.对于线程来说也是,通过多个线程就能完成一个更复杂的功能,这就需要多个线程协作,协作就需要交流,但是交流总是会出问题的.在这篇 ...

  10. 解决Qt 5程序运行时界面假死的方法

    在Qt 5的GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程.对于一些计算量比较大的非常耗时的操作,如果放在主线程中,就是出现界面无法响应的问题.这种问题的解决一种方式是 ...

最新文章

  1. kaldi语音识别实战pdf_语音识别相关工具和资料分享
  2. python函数修饰符@的使用
  3. 手动实现SPring中的AOP(2)
  4. 腾讯视频主演角色弹幕怎么发
  5. oracle一般人能不能学,Oracle人门学习笔记
  6. QT每日一练day27:绘制不规则窗体
  7. stupid soso spider
  8. php 数组 indexof,详解js中字符串和数组的indexof方法
  9. jQuery CSS 操作函数
  10. ibook软件java_Ibookv1.11 塞班版下载 - 手机阅读 - 非凡手机软件
  11. 数量积、向量积与混合积
  12. 使用Win64OpenSSL_Light生成自签名https授权证书的几个坑
  13. 第三批游戏版号下发 移动安全从业者有话说
  14. “双一流”霸气官宣:博士生,涨薪!
  15. LTE(4G) - NR(5G) RSRP和SINR RSRQ RSSI LTE信号质量
  16. 偏差-方差权衡(bias-variance-tradeoff)
  17. 【SLAM】VINS-MONO解析——回环检测和重定位
  18. 产品定位的方法与案例,遵循 大而全不如小而精 理念
  19. 程序员转正述职报告_程序员转正的述职报告【五篇】
  20. 马氏距离例题详解(全网最详细)

热门文章

  1. 爬虫抓取暗黑3玩家数据
  2. 如何破解域管理员密码
  3. win10计算机内存,win10系统电脑怎么升级内存?win10系统升级内存的方法
  4. 学习计算机基础必读的4本经典入门书籍,自学编程必备书单!
  5. unity自定义Scene窗口
  6. Tensorflow入门(一)----”搭建图像识别系统“教程整理
  7. Number 数字类型详解
  8. qq群发信息显示服务器检测到,QQ昨夜出现功能异常 你以为没发出去的消息都被对方看见了...
  9. 2015人生感悟哲理
  10. 解决电脑关机后自动重启问题