关于sleep(0)

Win平台高精度Sleep实现 获取时间戳 GetTickCount Windows平台, 可通过GetTickCount和GetTickCount64获取时间戳。它们底层实现是一样的, 返回值的位宽不同。GetTickCount返回uint32_t,最大值2^32,单位毫秒, 系统运行49.71天必定发生绕回的现象,程序处理不好很容易出问题,不建议使用。 GetTickCount64返回的是uint64_t,5.8亿年左右才绕回,更加直观安全。 QueryPerformanceCounter (QPC) Windows平台,可通过Que 阅读详情

Sleep(n)的作用是让当前线程睡眠n毫秒,以便执行其他线程,如果没有其他线程,那睡眠n毫秒后,继续执行。


Sleep 接口均带有表示睡眠时间长度的参数 timeout。调用以上提到的 Sleep 接口,会有条件地将调用线程从当前处理器上移除,并且有可能将它从线程调度器的可运行队列中移除。这个条件取决于调用 Sleep 时timeout 参数。

当 timeout = 0, 即 Sleep(0),如果线程调度器的可运行队列中有大于或等于当前线程优先级的就绪线程存在,操作系统会将当前线程从处理器上移除,调度其他优先级高的就绪线程运行;如果可运行队列中的没有就绪线程或所有就绪线程的优先级均低于当前线程优先级,那么当前线程会继续执行,就像没有调用 Sleep(0)一样。

当 timeout > 0 时,如:Sleep(1),会引发线程上下文切换:调用线程会从线程调度器的可运行队列中被移除一段时间,这个时间段约等于 timeout 所指定的时间长度。为什么说约等于呢?是因为睡眠时间单位为毫秒,这与系统的时间精度有关。通常情况下,系统的时间精度为 10 ms,那么指定任意少于 10 ms但大于 0 ms 的睡眠时间,均会向上求值为 10 ms。

而调用 SwitchToThread() 方法,如果当前有其他就绪线程在线程调度器的可运行队列中,始终会让出一个时间切片给这些就绪线程,而不管就绪线程的优先级的高低与否。


结论:

由上面的分析可以看出,如果我们想让当前线程真正睡眠一下子,最好是调用 Sleep(1) 或 SwitchToThread()。


Win32线程——等待另一个线程结束 《Win32多线程程序设计》–Jim Beveridge & Robert Wiener “等待某个什么东西”是线程常常需要做的事。等待是线程的“必要之恶”。 如果你没有等待线程结束就莽撞地结束程序,线程会被系统强制结束掉——在它完成它的工作之前。 由于让线程停工是操作系统的责任,很合理地我们会认为操作系统也有责任让其他线程知道某个线程停工了。 Sleep()这个函数要求操作系统中止 阅读详情

相关推荐

MicroPython-On-ESP8266——延时器与定时器

延时器与定时器 1 延时器 让cpu暂停一下(自己控制时长),然后再继续工作。 前面已经现在的LED闪烁和PWM里面的呼吸灯,都有用到延时功能。 1.1 延时模块utime 在micropython中,系统延时需要用到utime模块。该模块下有以下三个sleep函数: utime.sleep(seconds) 以秒为单位的延时 utime.sleep_ms(ms) 毫秒级的延时 utime.sleep_us(us) 微秒级的延时 例如延时1秒(也即1000毫秒) utime.sleep(1) utime

南极嗑烤队 4408

深入分析Sleep(0)与Sleep(1)的区别

深入分析Sleep(0)与Sleep(1)的区别 罗朝辉 (http://www.cnblogs.com/kesalin/) CC许可,转载请注明出处 目的: 有时候我们想让线程不被调度一定的时间,也就是说让线程睡眠一段时间。 API 接口: 在 Win32中可以调用 Sleep,SleepEx 和 SwitchToThread 三个API。 VOID WINAPI Sleep(...

weixin_34162401的博客 1718

别再只会regress了!用Stata的csdid命令搞定多期DID的完整实操指南

本文详细介绍了如何在Stata中使用csdid命令进行多期DID分析,解决传统DID方法在交错处理场景下的局限性。通过完整的实操指南,包括环境搭建、核心语法、结果解读和高阶应用,帮助研究者更准确地评估政策效果,适用于计量经济学和实证研究领域。

weixin_30236595的博客 582

pythontimesleep0_Linux下Python的time.sleep(0)的行为-是否引起上下文切换?

This pattern comes up a lot but I can't find a straight answer.An non-critical, un-friendly program might dowhile(True):# do some workUsing other technologies and platforms, if you want to allow this ...

weixin_39628247的博客 256

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 177

Revit获取族预览图

最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

weixin_44631419的博客 1757

sleep和sleep(0)的区别

操作系统原理 操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,而Windows则属于抢占式的。 在时间片算法中,所有的进程排成一个队列。操作系统按照他们的顺序,给每个进程分配一段时间,即该进程允许运行的时间。如果在 时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程 序所要做的就是维护一张就绪进程列表,,...

mingwulipo的博客 3635

Nacos启动报错No DataSource set?5分钟搞定standalone模式配置

本文针对Nacos启动时常见的“No DataSource set”报错,深入解析了其根源在于默认集群模式与外部数据库依赖。提供了两种快速解决方案:通过命令行参数“-m standalone”启动,或直接修改启动脚本配置文件,从而在5分钟内以单机模式成功启动Nacos,无需配置MySQL数据库。

weixin_29234509的博客 465

Windows Sleep()函数之Sleep(0)用法

Windows Sleep()函数之Sleep(0)用法

geriletuma 2124

基于freesurfer和3Dslicer的脑区分割与电极定位全流程解析(实战指南)

本文提供了一套基于FreeSurfer和3D Slicer的颅内电极定位实战指南。详细解析了从环境搭建、数据预处理、FreeSurfer脑区分割、影像配准,到3D Slicer中手动与自动化电极定位的全流程。重点介绍了如何利用FreeSurfer进行高精度脑区分割,并在3D Slicer中实现电极触点的可视化标记与坐标提取,最终获得带脑区信息的电极数据,为iEEG/SEEG研究奠定基础。

banana的博客 299

040、未来展望:MLIR与编译技术的演进方向

MLIR不是又一个编译框架,它更像是一套“元框架”——提供构建专用编译工具的能力。未来几年,我们会看到更多垂直领域(自动驾驶、射频信号处理、生物计算)出现基于MLIR的专用编译器,它们可能不会挂“MLIR”的名字,但内核都是这套可扩展的IR基础设施。不要等MLIR“成熟”再用,现在就该把它当成一把瑞士军刀,先挑刀口最锋利的那个功能(比如图优化、循环变换)用起来。编译技术的演进不再是学术界的独角戏,而是越来越贴近实际生产中的异构、动态、领域专用需求。

m0_50546716的博客 175

Sleep()简析 和Sleep(0)的妙用

Sleep()简析 和Sleep(0)的妙用 原贴地址:残月:Thread.sleep(0)的意义 &nbsp&nbsp HawkJony:Sleep(0)的妙用 Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1000) 就有感觉了。似乎毫无意义。 MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 ...

空持百千偈的博客 1441

Agentic AI商业化落地指南:提示工程架构师的7步优化法

Agentic AI(具备自主感知、决策与行动能力的智能体系统)是未来AI商业化的核心方向,其价值在于将大模型的“认知能力”转化为“实际行动”,解决复杂商业场景中的自动化与个性化需求。而提示工程(Prompt Engineering)作为连接人类意图与智能体行为的“翻译器”,直接决定了智能体的可控性、效率与用户体验,是Agentic AI商业化落地的关键支撑。本文结合第一性原理与工程实践,提出提示工程架构师的“7步优化法”,覆盖从“商业目标定义”到“规模化推广”的全流程。通过理论框架推导架构设计拆解。

AI架构全栈开发实战笔记 1万+

Sleep(0)的妙用

Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1000) 就有感觉了。似乎毫无意义。 MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 Thread.Sleep(0) 并非是真的要线程挂起0毫秒,意义在于这次调用Thread.Sleep(0)的当前线程确实的被冻结了一下,让其他线程有机会优先执行。Threa

5万+

ABAP 里解构引用操作符 ->* 的使用方法详解

解除引用操作符->*可用于将“类型为REF TO …的引用变量”的值(即该引用所指向内存)取出,从而访问其实际值或内部组件。具体地,若dref是一个“引用变量”,则表达式dref->*代表对该引用进行“解除引用”,使得程序按静态类型将其视为实际类型的值对象。例如,若lr类型声明为,则lr->*表示“将 lr 引用的INT4对象看作INT4类型并访问其值”。注:若 “数据引用变量” 的静态类型是通用类型DATA,则只能在这种上下文中使用->*。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 480

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

sleep(0),sleep以及yeid 的区别

Thread.Sleep(0) Sleep 的意思是告诉操作系统自己要休息 n 毫秒,这段时间就让给另一个就绪的线程吧。当 n=0 的时候,意思是要放弃自己剩下的时间片,但是仍然是就绪状态,其实意思和 Yield 有点类似。但是 Sleep(0) 只允许那些优先级相等或更高的线程使用当前的CPU,其它线程只能等着挨饿了。如果没有合适的线程,那当前线程会重新使用 CPU 时间片 优势:相比 ...

yizhizou123ABC的专栏 1284

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Sleep(0)及其使用场景

    Sleep(n)的作用是让当前线程睡眠n毫秒,以便执行其他线程,如果没有其他线程,那睡眠n毫秒后,继续执行。    而如果n=0,Sleep(0)是指CPU交出当前线程的执行权,让CPU去执行其他线程。也就是放弃当前线程的时间片,转而执行其他线程。    那么,Sleep(0)应该在那种情况下使用? 一般来说,如果当前线程比较耗时比较占CPU资源,可以在结尾处加上Sleep(0),

4946

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Sleep(0)与Sleep(1)区别

1、问题 在线程中我们会经常按如下写代码,Sleep(0)比Sleep(1)更容易获得时间片 DWORD WINAPI SampleThread(PVOID pvParam) { while ( true ) { // do something Sleep(1); } return 0x50; } 2、原因 MSDN说明如下: Remarks This function causes a thread to relinquish the remainde

yfh1985sdq的专栏 1409

sleep(0) 与sleep(>0)区别

sleep (1) 与sleep (0)的区别与线程的优先级有关系。 线程创建后,会进入线程调度队列。 线程调度队列通常按线程的优先级分成多个队列。 每个优先级都会有一个队列。 sleep(1)函数的调用会使线程进入等待状态。这个时候线程上下文会被切换出去。 调用sleep(0) 的时候, 如果调度器中不存在优先级 >= 该线程优先级的情况下,该线程将会继续运行。否则,线程会被放入到其

cenchure的专栏 725

sleep(0) 与sleep(>0)区别

sleep (1) 与sleep (0)的区别与线程的优先级有关系。 线程创建后,会进入线程调度队列。 线程调度队列通常按线程的优先级分成多个队列。 每个优先级都会有一个队列。 sleep(1)函数的调用会使线程进入等待状态。这个时候线程上下文会被切换出去。 调用sleep(0) 的时候, 如果调度器中不存在优先级 >= 该线程优先级的情况下,该线程将会继续运行。否则,线程会被放入到其优先级相应的队列尾部。也就是说我们调用sleep(0) 时 ,通常会让程序里其他线程获得更多的运行时间。 ...

qq_23350817的博客 420
上一篇: QueryPerformanceFrequency精确获取时间
下一篇: 命令行下 mysql 不是内部或外部命令排查方法
Maybe______
博客等级 码龄10年 26粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值