【问题标题】:sleep command in threaded application线程应用程序中的睡眠命令
【发布时间】:2011-04-16 14:07:13
【问题描述】:

Windows 中的 Sleep(ms) 命令导致线程释放它们的时间片。是否有等效的 Sleep(ms) 命令可以暂停线程但不释放时间片?

【问题讨论】:

  • 为什么要忙着等待?
  • @Erik,有问题的线程正在控制一个硬件。如果它尝试发送两个连续的命令,而命令之间没有等待至少 500 毫秒,则该命令不会注册。
  • @rossb83:那为什么需要你避免Sleep
  • @Erik 因为睡眠结束后,线程需要很长时间才能恢复其时间片。其他线程正在执行非常密集的计算。
  • @rossb83: 给这个线程尽可能高的优先级,而其他线程的优先级较低。然后使用睡眠。

标签: c++ windows thread-sleep


【解决方案1】:

你不想让你的线程休眠(也就是挂起),你想让它停止。用一个简单的循环来做到这一点:

#include <time.h>

void stall(unsigned ms){
    clock_t goal = clock()+ms;
    while(goal>clock());
}
// or maybe higher resolution with some performance profiling functions...

【讨论】:

    【解决方案2】:

    奇怪。

    这样做的一种方法是让您的线程执行一个循环,直到所需的周期结束。

    更好的解决方案可能是给处理设备的线程一个高优先级。不过反正Windows不太适合实时系统……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多