C语言中sleep函数的原理是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中sleep函数的原理是啥?相关的知识,希望对你有一定的参考价值。

原理应该是这样的:

例如执行sleep(3),表示当前线程停滞3ms后再继续执行下面的代码,底层步骤是:

    创建一个元素timeMillis:[当前时间戳+3ms],threadId:[线程id],并将该元素按顺序插入定时回调队列中,比如现在操作系统中有3个定时正在停滞中,分别是1ms、10ms、3ms之后唤醒,那么这个队列就类似这样子:timeMillis:110928283,threadId:106->timeMillis:110928285,threadId:211->timeMillis:110928292,threadId:189,时间从小到大排序;

    每当定时器产生一次中断时,中断回调函数中就会获取这个队列中第一个元素,将其timeMillis与当前时间戳比较,如果相等或超时,就表示该元素对应的线程106号线程需要唤醒了,则将106号线程的状态设置为TASK_RUNNING(就绪态),当下一次进程切换时,106线程就可以被切换到并执行了;

    注意:2中说的定时器和系统线程调度时钟定时器我觉得不是一个,而是两个时钟定时器,不确定。

参考技术A 由系统的时钟控制该线程或进程的切换本回答被提问者采纳 参考技术B signal、alarm、pause
三步实现

c语言中feof是啥意思

c语言中feof是什么意思

feof是一个c语言函数,既可用以判断二进制文件又可用以判断文本文件。feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。

EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCⅡ代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。

当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。


扩展资料:

feof的正确写法:

在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF。然后再调用feof(),才会得到文件结束的信息。

因此,如果运行如下程序:

char c;

while(!feof(fp))

c = fgetc(fp);

printf("%X/n", c); 


会发现多输出了一个FF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FF)。

正确的写法应该是:

char c;
c = fgetc(fp);
while(!feof(fp))

printf("%X/n", c); 
c = fgetc(fp);
 

参考资料来源:百度百科-feof

参考技术A 是个函数,用于检测流上的文件结束符。
用法:int feof(FILE *stream);
再给你个示例:
#include <stdio.h>
int main(void)

FILE *stream;
/* open a file for reading */
stream = fopen("DUMMY.FIL", "r");
/* read a character from the file */
fgetc(stream);
/* check for EOF */
if (feof(stream))
printf("We have reached end-of-file\n");
/* close the file */
fclose(stream);
return 0;

自己运行看看。
feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。
还有注意:你应该也知道EOF,但是你这里的feof()是不可以用EOF代替的,fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。

参考资料:http://baike.baidu.com/view/656648.htm

参考技术B 输入输出函数,检查文件是否结束,如结束,则返回非零值,否则返回0 .函数原型为:
int feof(FILE *fp)本回答被提问者采纳
参考技术C 输入输出函数,检查文件是否结束,如结束,则返回非零值,否则返回0 参考技术D 函数名
feof
功 能
检测流上的文件结束符
用 法
int feof(FILE *stream);

以上是关于C语言中sleep函数的原理是啥?的主要内容,如果未能解决你的问题,请参考以下文章

sleep()函数怎么具体在c语言中怎么用?

如何让C语言sleep()函数等待时间小于1秒

c语言Sleep()函数

c语言sleep的用法

51单片机C语言程序中延时函数delay的原理是啥?

C语言 字符串处理函数strtok第二次及以后的调用中第一个参数要用NULL的原因是啥? 能不能解释下原理?