nanosleep,nanosleep什么意思

http://www.itjxue.com  2023-01-14 14:57  来源:未知  点击次数: 

c语言休眠函数怎么写?

1、sleep()函数:秒级休眠函数

#include unistd.h

unsigned int sleep(unsigned int unSeconds);

参数unSeconds表示需要休眠的秒数;

2、usleep()函数:微秒级休眠函数;

#include unistd.h

int usleep(useconds_t lMicroSeconds);

参数lMicroSeconds表示要休眠的微秒数;

#ifndef _SUSECONDS_T

#define _SUSECONDS_T

typedef long suseconds_t; /* signed # of microseconds */

#endif ?/* _SUSECONDS_T */

类型useconds_t定义在头文件/usr/include/sys/types.h中;

3、nanosleep()函数:纳秒级休眠函数;

#include time.h

int nanosleep(const struct timespec* rqtp, struct timespec* rmtp);

4、其它休眠函数:

select()、pselect()、poll();等;

select()函数也可以精确到微秒,pselect()函数也可以精确到纳秒。

c语言sleep的用法

在C语言的教学当中,利用Sleep()等函数通过更加直观的显示效果,来使循环嵌套的层次更加清晰,break和continue等作用更加直观;通过硬件思维中的内存结构可以使初学者对指针有一个最根本也是最直接的认识,从而学生无论是对指针的认知还是使用,都将变得非常容易。 下面我就跟大家介绍下c语言sleep的用法。 Sleep函数: 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用带上头文件#include windows.h,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include unistd.h 在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep 在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。 示例: #include windows.h int main() { int a; a=1000; Sleep(a); return 0; } usleep函数: 功能: usleep功能把进程挂起一段时间, 单位是微秒us(百万分之一秒)。 语法: void usleep(int micro_seconds); 返回值: 无 注意:这个函数不能工作在 Windows 操作系统中。 usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。且此函数已被废除,可使用nanosleep。 如果延迟时间为几十毫秒,或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间。 delay函数: 功 能: 将程序的执行暂停一段时间,单位是毫秒ms(千分之一秒) 用 法: void delay(unsigned milliseconds); 示例: #includedos.h int main(void) { sound(440); delay(500); nosound(); return 0; } delay()是循环等待,该进程还在运行,占用处理器。 sleep()不同,它会被挂起,把处理器让给其他的进程。

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

原文地址:

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中的,所以都适用

(责任编辑:IT教学网)

更多

推荐PowerPoint文章