在无限循环中调用Sleep()有多重要?

Sam*_*mer 1 c++ winapi multithreading

正如标题所说,我有一个使用以下创建的线程:

 CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)this->TaskProc, this, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

TaskProc,我有一个无限的while循环:

while(true)
{
// large code with lots of initialization
// get task from another thread
//  Switch (task)
// at each case you would perform a task
Sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

我试图减少我的代码所花费的时间,我觉得Sleep(1)在while循环结束时没有必要!因为在点击之前已经在while循环中完成了很多计算Sleep(),是否可以删除Sleep()

编辑1:我不知道为什么这个问题引起了混乱和几次投票,这是一个包含很多线程(大约5个)的非常大的代码的一部分,我想知道什么时候我们必须在每个循环中添加等待!接受的答案似乎给出了从哪里开始的良好暗示.虽然,我认为这个问题可以有更好的答案.

jam*_*nan 7

这取决于你的循环中发生了什么.如果它正在忙等待并且通常什么都不做,那么Sleep调用(这看起来像Windows,因此它延迟1ms)将产生调度程序并可能阻止线程旋转CPU内核并打开CPU风扇.如果它总是有事可做,那么1ms的睡眠确实会加起来并减慢你的执行速度.我建议在有和没有Sleep调用的情况下观察任务管理器中的CPU使用情况,并使用已知输入对代码进行基准测试,看看实际需要更长时间的内容.


Vik*_*ehr 5

如果您想像这样睡觉,请使用std::this_thread::yield();代替睡眠。