x86 gcc 睡眠块还是旋转?
我如何在 C spin 中制作一个睡眠版本,以便它使用 cpu 周期?
How would I make a version of sleep in C spin so it uses cpu cycles?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我如何在 C spin 中制作一个睡眠版本,以便它使用 cpu 周期?
How would I make a version of sleep in C spin so it uses cpu cycles?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
我想像(伪代码)
“time < endtime”的实现是依赖于操作系统的,但你只想在循环开始之前根据参数计算结束时间,然后连续获取系统时间并将其与那个结束时间。
I suppose something like (pseudocode)
The implementation of "time < endtime" is OS-dependent, but you just want to compute the end time based on an argument before your loop starts, and then continuously fetch the system time and compare it to that end time.
您想要做的是忙碌等待,循环直到经过一定时间。只需获取当前时间(使用可用的最高精度计时器)并循环,直到当前时间达到启动后的一定时间。
下面是使用 Windows API 和使用两个关联函数的性能计数器的具体示例,<代码>QueryPerformanceCounter()和
QueryPerformanceFrequency( )
。无论是什么情况,请根据您的情况使用适当的 API。
What you want to do is a busy wait where you loop until a certain amount of time has elapsed. Just get the current time (using the highest precision timer available) and loop until the current time is a certain amount of time after you started.
Here's a concrete example using the Windows API and the performance counter using the two associated functions,
QueryPerformanceCounter()
andQueryPerformanceFrequency()
.Use the appropriate API in your case, whatever that may be.
除了这些之外,你还需要什么吗
?
Did you need anything more than just
?