正如标题所说,我有一个使用以下创建的线程:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)this->TaskProc, this, 0, NULL);
在TaskProc
中,我有一个无限的循环:
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);
}
我正在尝试减少代码所花费的时间,我觉得在while循环结束时Sleep(1)
不是必需的!因为在点击Sleep()
之前已经在while循环中完成了很多计算,是否可以删除Sleep()
?
EDIT1: 我不知道为什么这个问题引起了混乱和几次投票,这是一个包含很多线程(大约5个)的非常大的代码的一部分,我想知道什么时候我们必须在每个循环中添加等待!接受的答案似乎给出了从哪里开始的良好暗示。虽然,我认为这个问题可以有更好的答案。
答案 0 :(得分:7)
这取决于你的循环中发生了什么。如果它忙于等待并且通常什么也不做,那么Comparator
调用(这看起来像Windows,所以它的1ms延迟)将产生调度程序并可能阻止线程旋转CPU内核并打开CPU风扇。如果总是有事可做,那么1ms睡眠确实会加起来并减慢你的执行速度。我建议使用和不使用Sleep
调用来查看任务管理器中的CPU使用情况,并使用已知输入对代码进行基准测试,以查看实际需要更长时间的内容。
答案 1 :(得分:3)
如果你想这样睡觉,请使用std::this_thread::yield();
代替睡眠。