当前位置:首页 » 操作系统 » sleep函数linux

sleep函数linux

发布时间: 2023-04-07 19:21:19

linux 的sleep()、usleep()、nanosleep()函数

原文地址: https://blog.csdn.net/weibo1230123/article/details/79139476

sleep()非系统调用,sleep()是在库函数中实现的,它是通过alarm()来设定报警时间,使用sigsuspend()将进程挂起在信号SIGALARM上。
sleep()只能精确到秒级上。sleep()会令目前的进程暂停,直到达到参数seconds 所指定的时间,或是被信号所中断。

return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。

除了时间单位为微秒以外,在使用上与sleep()差不多。还有就是实现也是不同的,sleep因为是用alarm实现的,所以时间单位为s ,而usleep的时间单位为us
,那肯定不是由alarm实现的,所以说它们的实现不同,但都是linux用的,而window下不能用,因为都是sleep和usleep都是在unistd.h下定义的。

return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余微秒数。

这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
return: 若进程暂停到参数 req所指定的时间,成功则返回0,若有信号中断则返回-1,并且将剩余微秒数记录在 rem中。

unistd.h 是 unix 系统标准头文件,用于系统调用,相当于win32中的windows.h,unistd.h 定义的函数只能用于UNIX环境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它时间日期操作函数一样都是定义在time.h中的,所以都适用

㈡ 嵌入式 linux下sleep函数到底是线程休眠还是进程休眠

Linux实际上没有真正线程的概念,pthread库中的“线程”被许多人称作“轻量级的进程",内核负责调度所有的进程,且在内核眼里被我们看做线程的东西与普通进程是无差别的。
sleep函数休眠的是当前进程,而pthread库中的“线程”事实上就是进程,因此该函数的作用域就是这个“线程”。

㈢ C语言中的sleep() 函数

使用要带上头文件:

#include <windows.h>

Sleep函数:
功 能: 执行挂起一段时间
用 法: unsigned sleep(unsigned seconds);
注意:
1.在VC中使用带上头文件#include <windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h>
2.在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep。
3.在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。

示例:


#include<dos.h>
int main(void)
{
sound(440);
delay(500);
nosound();
return 0;
}
delay()是循环等待,该进程还在运行,占用处理器。
sleep()不同,它会被挂起,把处理器让给其他的进程。

㈣ linux系统 下 如何让C语言sleep()函数等待时间小于1秒

sleep()函数大概只能精确到50ms左右,你用sleep(10)是肯定不行的,如果你要精确的定时的话可以使用QueryPerformanceFrequency()函数,用法为:
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;// 获得初始值
do
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;//获得中止值
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒
}while(dfTim<0.001);
其定时误差不超过1微秒,精度与CPU等机器配置有关。

×××××××××××××××××××××××××

sleep()函数的中等待时间是以毫秒计算的,所以等待1秒就是sleep(1000),如果要让等待时间小于一秒,那么就让传入的参数小于1000就行了.
比如,等待0.1秒:
sleep(100);

㈤ linux中C语言编程时的sleep函数和clear函数的问题

while(n!=0)
{
printf("%2d:%2d:%2d\n",n/3600,(n%3600)/60,n%60); //这里必须要有\n,不然,因为缓存的问题,系统默认输出是行缓存输出,在没有遇到回车换行时,缓存没有满时,数据会一直不能输出,加了回车,就可以输出了。

热点内容
androidwifi传输数据 发布:2025-09-11 18:35:09 浏览:630
行李箱两个怎么改密码 发布:2025-09-11 18:27:18 浏览:310
python3html解析 发布:2025-09-11 18:25:24 浏览:185
xp服务器如何上传ftp 发布:2025-09-11 17:42:35 浏览:885
android目录下 发布:2025-09-11 17:36:39 浏览:558
监控校时服务器地址 发布:2025-09-11 17:12:42 浏览:244
小米云有什么密码 发布:2025-09-11 16:31:38 浏览:963
天正配置重置了打不开怎么e 发布:2025-09-11 16:18:29 浏览:168
普通的密码箱一般密码是多少 发布:2025-09-11 16:08:16 浏览:497
linuxhome在哪 发布:2025-09-11 15:29:37 浏览:236