延时函数sleep和delay 区别
延时函数的两种常用名称是sleep和delay。一般在上位机多见sleep,单片机常用delay。那么sleep和delay的意义有何区别?
sleep意为睡眠,即线程挂起,由定时器重新唤醒线程。sleep作用期间,该线程不占用CPU资源。
delay意为延迟,即线程等待,由线程自身进行循环查询,在设定时间之后退出循环。delay作用期间,该线程占用CPU资源。
在上位机,delay常可以和sleep组合使用,即循环查询中调用sleep,降低CPU占用率。sleep是由系统内核、固件库或特殊功能寄存器提供调用接口,而delay是程序员可以完全自己定义的一个循环函数,没有标准。sleep是由硬件提供的延时,如果要中断sleep,也需要通过相关的特殊功能寄存器进行操作。delay是软件提供的延时,可以使用任意内存空间作为信号使delay退出循环。
另外,wait和sleep具有相同的含义,都是由硬件提供的延时,但wait比sleep具有更多的功能。wait常用来表示可中断的延时。而sleep常用来表示不可中断的延时。Java中还有一个叫await的函数。由于Java中wait是Object的成员函数,Lock中只能换用一个近义词await。
关于wait的唤醒,Qt中是叫wakeOne和wakeAll,Java中是叫notify和notifyAll,Java中的await对应的唤醒函数是signal和signalAll。唤醒函数的命名似乎没有什么规律。一些脚本语言中的sleep和wait并没有对应的唤醒函数,而是使用键盘上的任意键唤醒。