进程线程中睡眠函数(sleep)被信号中断后失效,处理方式总结
来源:互联网 发布:什么是java覆盖 编辑:程序博客网 时间:2024/05/17 19:16
进程线程中睡眠函数sleep被信号中断后失效,处理方式
很多时候根据程序运行需要,或者调试什么的,需要在程序中延时。当然一般应用的是sleep 函数 , 但是有些时候,如果不注意sleep的用法,那么在多线程编程中,在信号驱使下sleep就会出现失效的特性,或者说起不到延时的作用,原因何在,先看一段代码:
在这段代码中我们可以看到113行if后如果为0 那么程序就会执行 sleep(30),然而程序在真正执行的时候,除非你不进行任何的操作,就等着程序运行结束,你可以看到正常现象。如果你在程序运行期间发送一个SIGINT信号(且在程序运行开始30之内)那么你就会看到,程序直接结束了tid2的线程,sleep并没卵用。
那么是为何呢?
就是因为sleep()运行是程序捕获到一个信号,那么这个信号就会中断sleep,去执行信号所指内容,等处理好信号之后,程序会直接跳到sleep的下一行执行,那么即使sleep秒数没有数完,也照样结束。这就是造成sleep失效的原因。
那么根据这个特性,我提供一种不太精确的解决方法,就是将sleep放到一个循环中去。每次循环延时1秒,因此要延时的秒数约等于循环的次数。在延时精度要求不高的情况下我认为这个方法是可行的,也希望我的方法能够抛砖引玉,得到更多好的方法;
0 0
- 进程线程中睡眠函数(sleep)被信号中断后失效,处理方式总结
- java中的睡眠--线程的Sleep中断
- java中 sleep线程睡眠 Join线程独占 Yeile 线程让步 Interrupt线程中断 Deamon后台线程
- 嵌入式 解决线程使用sleep或usleep等函数导致整个进程睡眠的问题
- 中断处理中不能睡眠的原因
- 中断处理中不能睡眠的原因
- 控制线程---线程睡眠:sleep
- 信号中断处理函数中的信号屏蔽
- 线程睡眠(sleep)线程让步(yield)
- day_11进程管理、中断、信号处理
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
- 信号发送及可中断睡眠和不可中断睡眠
- SIGALRM信号会中断sleep
- 中断中I2C通信导致进程调度或者睡眠
- linux进程---信号处理函数
- 线程阻塞和中断(sleep、wait、io、锁)四种恢复方式
- NUOJ 737 石子合并(一)区间DP
- git拉取远程分支并创建本地分支
- 在活动中使用Intent(笔记)
- MyEclipse错误:Servlet execution threw an exception with root cause
- mysql UNIX时间戳与日期的相互转换
- 进程线程中睡眠函数(sleep)被信号中断后失效,处理方式总结
- Spark错误:Lost task 0.0 in stage 10.0 (TID 17, slave1): java.io.FileNotFoundException
- Android中Textview显示带html文本一-------【HTML标签】
- 关于smarty怎么读取本地文件配置的变量问题上
- 使用springMVC时遇到的HTTP Status 405
- java中类的加载顺序
- C语言的历史及特点
- android studio导入sample的时候,出现了错误
- Android中Textview显示带html文本二-------【Textview显示本地图片】