问题标题: 酷町堂:这是什么函数

0
0

0
已采纳
李明翰
李明翰
新手光能
新手光能

关于VOID Sleep(DWORD dwMilliseconds);函数,许多人都觉得,它是告诉系统,延迟多少毫秒来执行后面的代码。但是,在WINDOWS这样的非实时多任务系统中,我们是无法估算会睡眠多久的。因为一个线程不是总是被执行的。它会在执行一段时间后,被系统暂停,然后系统又去执行另外的线程代码。于是,Sleep函数的解释如下:当调用Sleep函数的时候,比如Sleep(400);它告诉系统,此线程将放弃此次运行的时间片,比方说现在线程只执行了10ms,按“有关部门规定”它被唤醒一次是要执行20ms的。这时它就说,这次机会我放弃,后面的10ms不要了。下次轮上我再叫我。 这样,系统便会将其终止,然后再一次进行调度选择。如果它运气很好,又被选中了,系统则会查看这个线程是否处于sleep标志中。如果发现他还需要继续睡眠,则重新进行调度选择,直到选择一个有权执行的线程为止。 如果很不幸,400ms到了,但是系统很忙,调度算法在很长一段时间也没有选择到这个线程,那这么线程就很继续休眠。于是说,这个Sleep(400);将导致这个线程会休眠大于等于400MS的时间。

 

1、调用Sleep,可使线程自愿放弃它剩余的时间片。

2、系统将在大约的指定秒数内使线程不可执行。不错,如果告诉系统,想睡眠100MS,那么可以睡大约这么长的时间,但也也可能睡眠数秒或数分钟。记住,WINDOWS不是个实时操作系统。虽然线程可能在规定的时间被唤醒,但是它能否做到,取决于系统中还有什么操作正在进行。

3、可以调用Sleep(INFINITE),告诉系统永远不要调用这个线程。但最好不要这样,让线程退出就行了。反正你都不再需要它。或者调用Sleep(0);告诉系统线程将放弃剩于的时间片,并使系统调度另一个线程。但是,系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程。就会出现这种情况

如此详细,求采纳谢谢。

还有很同情你,一下子变成了修炼者,努力白费了,哎

1
被禁言 贾天宇
贾天宇
高级守护
高级守护

函数名: Sleep

功 能: 执行挂起一段时间

用 法: void Sleep(DWORD dwMilliseconds);

在VC中使用带上头文件

#include <windows.h>

( Sleep函数存放头文件:WinBase.h)

在gcc编译器中,使用的头文件因gcc版本的不同而不同

#include <unistd.h>

Sleep()单位为毫秒,sleep()单位为秒(如果需要更精确可以用usleep单位为微秒)

返回值

若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数

贾天宇在2019-08-19 17:01:48追加了内容

在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。

贾天宇在2019-08-19 17:02:28追加了内容

示例

#include <windows.h>

#include<stdio.h>

int main()

{

int a;

a=1000;

printf("你");

Sleep(a);/* VC 使用Sleep*/

printf("好"); /*输出"你"和"好"之间会间隔一千毫秒,即间隔一秒,Sleep()的单位为毫秒*/

return 0;

}

0
0
0
0
毛润宇
毛润宇
新手天翼
新手天翼

C++中头文件<windows.h>下的函数

作用:延时,程序暂停若干时间。

时间,就是他的参数,单位是毫秒

例如:

Sleep (500) ;

就是到这里停半秒,然后继续向下执行。

——————————————————

在Linux C语言中 Sleep的单位是秒

Sleep(5); //停5秒

注意:Sleep的S要大写。

——————————————————

Visual Basic

声明:Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

库名:kernel32

说明:dwMilliseconds 必要参数,停顿的时间。单位:毫秒(ms)
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppxl/20090319/163402.html)

0
赵逸凡
赵逸凡
初级启示者
初级启示者

Sleep()函数,必须加头文件windows.h,对Ubuntu处理器无效, 比如你要打出一行字,暂停3秒,就可以写

Sleep(3000)

我的回答没有抄袭网站,原创

0
我要回答