首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linuxsleep函数和delay函数

对于做过单片机程序的朋友来说,delay是很常见的函数,通常就是while或者for循环,进行空指令的执行,由于单片机的晶振固定,一个机器周期的时间是固定的,执行多少个空指令, 就可以完成多少个机器周期时长的延时...其实在linux的delay函数,道理是一样的,都是通过cpu执行空指令来达到延时的目的,但是对于操作系统这种多线程进行的方式来说,在需要延时的时候,可以通过将进程挂起的方式来实现延时。...这就是sleep函数sleep和delay的区别 最明显也最重要的区别就是,在执行delay的时候,是执行了空指令,虽说是空的,但是还是会占用硬件资源,cpu要进行运算。...而sleep是将此进程挂起,cpu还会执行其他进程,待到时间到,再恢复此进程。...两者对比可以看出,sleep执行的时候,节省系统资源,但是弊端是sleep的定时并没有那么准确,因为是通过进程切换来实现的,delay则是严格按照机器周期来计算,而且sleep不能适用于时间太短的延时,

3.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言之Sleep函数

    Sleep函数: 功 能: 执行挂起一段时间   用 法: unsigned sleep(unsigned seconds);   注意:   在VC中使用带上头文件#include ,在Linux下,gcc编译器,使用的头文件因gcc版本的不同而不同#include   在VC,Sleep的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C...sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep 在VCSleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux...语法: void usleep(int micro_seconds); 返回值: 无 注意:这个函数不能工作在 Windows 操作系统。 usleep() 与sleep()类似,用于延迟挂起进程。...只是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。且此函数已被废除,可使用nanosleep。  如果延迟时间为几十毫秒,或者更小,尽可能使用usleep()函数

    7.7K80

    【CC++】Sleep()函数详解

    调用倒计时小程序函数,并传入倒计时秒数:10s return 0; } 在vs2022编译器运行查看结果: 可见Sleep()函数成功的将每次打印的秒数中间间隔了1s...函数头文件 该函数包含在头文件。...return 0; } 在Xshell (操作系统:CentOS 7.9 64位)运行查看结果: 可见sleep()函数成功的将每次打印的秒数中间间隔了1s。...小tips: 在Linux的sleep()函数,如果在休眠期间有信号到达,函数可能会提前返回,导致实际睡眠时间少于所请求的时间。...在WindowsSleep()通常不会被信号中断,适合需要精确睡眠的场景。 结语 希望这篇关于Sleep()函数的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流. 学海漫浩浩,我亦苦作舟!

    10310

    Linux时序竞态问题(sleep函数的实现)

    比如说我们要使用alarm和pause函数来实现一个sleep的功能,那么由于alarm函数的实现过程并不是一个原子操作,那么随时可能被中断。...比如说alarm了1秒,在这个过程,进程失去了CPU,然后当该进程再次获得CPU的时候可能这个时间已经大于1秒了,那么对于alarm来说就已经发出了SIGALRM信号。...此时往下继续调用pause函数的话,它会一直都收不到alarm发来的信号,所以导致进程的永久挂起。        为了解决这个问题,引用了sigsuspend函数。...进程在接收到UNBLOCK(mask之外)信号后,调用处理函数,然后还原信号集,sigsuspend返回,进程恢复执行。...下面通过使用alarm和sigsuspend函数来实现sleep函数,代码中有详细的注释来解释说明: #include #include #include <signal.h

    2.7K30

    Javasleep和wait的区别

    1、sleep方法是Thread类的静态方法; wait方法是Object类的成员方法 2、sleep方法使当前线程暂停执行指定的时间,让出cpu给其他线程,但是它的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态...在调用sleep方法后,线程不会释放对象锁; 而当调用wait方法时,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池处于准备状态。...3、sleep方法有可能会抛出异常,所以需要进行异常处理; wait方法不需要处理 4、sleep方法可以在任何地方使用; wait方法只能在同步方法和同步代码块中使用 Java中线程的生命周期图谱如下所示

    3.3K21

    JavaThread.sleep源码分析

    本文将从源码角度分析Thread.sleep的实现机制。...JVM_END 由上面的代码我们可以看到,如果在调用sleep之前或在sleep过程sleep线程被interrupt了,则该sleep方法会抛出InterruptedException异常。...比如,在park方法,如果检测到_event值不等于0,则说明unpark方法被调用过,不用等待了。...如果park方法被调用过,则需要再进一步加锁检查_nParked字段,如果_nParked还是不等于0,说明该线程确实是在堵塞等待过程,调用pthread_cond_signal方法,告诉这个线程,其可以从阻塞状态退出了...有关Thread.interrupt方法是如何调用_SleepEvent的unpark方法,使Thread.sleep从sleeping状态退出的,请查看文章: JavaThread.interrupt

    83130

    javaScript实现sleep函数(红绿灯实现思路)

    sleep=====js是没有sleep函数,本文模拟sleep函数实现,比较常见常见的问题就是红路灯。sleep函数可以延迟程序的执行,程序执行过程能够捕获到异常并抛出。...方式二优化一下上面Promise实现的代码,如下: Promise.resolve()将现有对象转为promise对象,相当于new Promise(resolve => resolve()),在then回调执行...(time)} main(1000).next().value.then(()=>{ console.log('1s后输出')})在调用main函数(Generator函数)时,它不会执行...下图是Generator函数的数据结构:next()方法会执行generator的代码,其中 main(1000).next()是对象,有两个值,一个是key为value的执行后的promise对象,一个是...next().value.then(()=>{ console.log('第s后输出')})3.async/await实现用async/await使异步代码同步化,等await后面的函数执行完后再执行下面的代码

    80810

    你能说出多线程 sleep、yield、join 的用法及 sleep与wait区别吗?

    作者:noteless cnblogs.com/noteless/p/10443446.html Object的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑...另外,你应该已经注意到sleep方法都有static修饰,既然是静态方法,在Thread的惯例就是针对于:当前线程,当前线程,当前线程 yield方法 对于sleep或者wait方法,他们都将进入特定的状态...在方法深入介绍前先看个例子 一个线程,循环5次,每次sleep 1s,主线程打印信息 从结果可以看到,主线程总是在线程执行之后,才会执行,也就是主线程在等待我们创建的这个线程结束,结束了之后才会继续进行...结论: 主线程main调用启动线程(调用start),然后调用该线程的join方法,可以达到主线程等待工作线程运行结束才执行的效果,并且join要在start调用后 如何做到的? ?...,被中断后都会抛出异常 wait是Object的方法,sleep是Thread的方法 wait必须在同步执行,sleep不需要(join底层依赖wait,但是不需要在同步,因为join方法就是synchronized

    1.4K20
    领券