sleep函数(在c语言中,sleep()怎么用)

本文目录
在c语言中,sleep()怎么用
sleep()用于代码的阻断延迟运行,其用法步骤如下:
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,输入C语言代码:Sleep(1000);printf(“sleep end.“);。
3、编译器运行test.cpp文件,此时成功执行Sleep()函数在1秒后打打印内容。
c语言Sleep()函数
Sleep(1) 是休息 1毫秒。不是非常精确的,只是说分辨率是 1毫秒。
你的循环语句的执行,输出语句的执行,也要花时间,同一时间,你的计算机系统还有很多进程也在运行,它们共享同一电脑的资源。 所以 你的程序 输出不了那么多数。
c语言sleep用法
C语言标准库中没有sleep这个函数,它实际上是一个系统API函数。
函数功能: 执行挂起一段时间
1、在VC中使用带上头文件,而且全称为Sleep(),第一个字母需要大写。
#include 《windows.h》 //需要添加头文件Sleep(unisgned long); //函数声明
Windows中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该写成:
Sleep(1000);2、在gcc中,使用的头文件因gcc版本的不同而不同,一般来说,linux系统需要添加的头文件为:
#include 《unistd.h》
应该是Sleep(1000);
在Linux下,sleep()里面的单位是秒,而不是毫秒。
sleep函数的具体用法
Sleep函数
功 能: 执行挂起一段时间
用 法: void Sleep(DWORD dwMilliseconds);
在VC中使用带上头文件
#include 《windows.h》
( Sleep函数存放头文件:WinBase.h)
在gcc编译器中,使用的头文件因gcc版本的不同而不同
#include 《unistd.h》
Sleep()单位为毫秒,sleep()单位为秒(如果需要更精确可以用usleep单位为微秒)
返回值:若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数。
注意:
在VC中Sleep中的第一个英文字符为大写的“S“
在标准C中是sleep, 不要大写.. 下面使用大写的来说明,, 具体用什么看你用什么编译器. 简单的说VC用Sleep, 别的一律使用sleep.
Sleep函数的一般形式:
Sleep(unsigned long);
其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
在Linux下,sleep中的“s”不大写
sleep()单位为秒,usleep()里面的单位是微秒。在内核中,sleep的实现是由pause函数和alarm函数两个实现的。
特别注意在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以认为mingw舍弃了sleep函数,建议用Sleep实现sleep。
程序示例:
#include 《windows.h》
#include《stdio.h》
int main()
{
int a;
a=1000;
printf(“你“);
Sleep(a);/* VC 使用Sleep*/
printf(“好“); /*输出“你”和“好”之间会间隔一千毫秒,即间隔一秒,sleep()的单位为毫秒*/
return 0;
}
sleep函数
在VC中使用带上头文件
#include 《windows.h》
注意:
在VC中Sleep中的第一个英文字符为大写的“S“
在标准C中是sleep, 不要大写.. 下面使用大写的来说明,, 具体用什么看你用什么编译器. 简单的说VC用Sleep, 别的一律使用sleep.
Sleep函数的一般形式:
Sleep(unisgned long);
其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
例:
#include 《windows.h》
int main()
{
int a;
a=1000;
Sleep(a);/* VC 使用Sleep*/
return 0;
}
usleep功能:
暂停执行。 语法: void usleep(int micro_seconds); 返回值: 无 函数种类: PHP 系统功能 内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的毫秒数(微妙还是毫秒?)。 注意:这个函数不能工作在 Windows 操作系统中。参见:usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。
只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。
且,此函数已被废除,可使用nanosleep。
如果延迟时间为几十毫秒,或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间
delay:
函数名: delay
功 能: 将程序的执行暂停一段时间(毫秒)
用 法: void delay(unsigned milliseconds);
程序例:
/* Emits a 440-Hz tone for 500 milliseconds */
#include《dos.h》
int main(void)
{
sound(440);
delay(500);
nosound();
return 0;
}
(由于delay读音像地雷,在各大OI灌水区通用……)
delay()是循环等待,该进程还在运行,占用处理器。
sleep()不同,它会被挂起,把处理器让给其他的进程。
sleep()参数指定暂停时间,单位是s
delay()参数指定暂停时间,单位是ms
Sleep函数的注意
在VC中Sleep中的第一个英文字符为大写的S
在标准C中是sleep, 不要大写.. 下面使用大写的来说明,, 具体用什么看你用什么编译器. 简单的说VC用Sleep, 别的一律使用sleep.
Sleep函数的一般形式:
Sleep(unsigned long);
其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);
在Linux下,sleep中的“s”不大写
sleep()单位为秒,usleep()里面的单位是微秒。在内核中,sleep的实现是由pause函数和alarm函数两个实现的。
特别注意在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以认为mingw舍弃了sleep函数,建议用Sleep实现sleep。
sleep函数休眠是针对进程级别还是线程级别
sleep函数很简单,参数为秒,就是睡眠一段时间。
今天和同事争论,他说sleep的作用是让进程睡眠,我说的是让线程睡眠。谁对谁错?
如果是针对进程,那么进程中的任何一个线种在调用sleep,那么整个进程都会被挂起休眠,这不科学。因此必须是针对线程才是合理的。
别争论了,先看一下man手册吧,如图1所示。

图1
说得很清楚,让调用sleep的线程睡眠一定秒数。
写段程序验证一下吧:

图2
图2中第8行是线程test执行sleep(3),即睡眠3秒。第17行是主线程执行sleep(4),睡眠4秒,如果sleep是进程级别,那么在此情况下,程序执行的时间应该大于等于7秒才对。因为操作系统在调度的时候,要么先调度线程test,要么先调度主线程main。总有一个sleep会把整个进程阻塞,一共会阻塞两次,因此是两个阻塞的时间之和再加上陷入内核、上下文切换的时间,肯定大于等于7秒。下面是执行结果

图3
执行时间是4.003秒,也就是程序执行时间是以主线程的睡眠4秒(第18行的sleep(4))为主,这说明sleep是线程级别的。
接着问,如何才能让程序执行时间是7秒以上呢,也就是让两个线程test和主线程依次执行?
这很简单,主线程main用pthread_join,让调用线程main自己阻塞,等待线程test执行完成后再执行main就行了。改下代码,如图4所示。

图4
就是在第17行加了pthread_join函数,让main线程等待test线程,下面是运行结果。

好了,多谢大家。

本文相关文章:
while语句怎么结束(c语言中while(y--)是怎么结束的)
2026年10月10日 15:30
basic语言教程(我想学basic语言,请问怎么入门,股票指标就是用这个需要编辑的)
2026年8月21日 09:40
更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00








