在C中使用CLOCKS_PER_SEC是否保证获得1秒?
我知道clock()不提供挂钟时间,并且CLOCKS_PER_SEC是系统相关值。假设我不关心系统相关问题,我可以假设下面的代码在GNU/Linux和Windows 中总是等待 1 秒,因为我测试过它对我来说似乎没问题。还是我应该坚持使用依赖于系统的sleep()/usleep()函数?
void wait_a_sec()
{
clock_t start = clock();
do
{
// wait 1 sec
/**
* Second call to clock() gives the processor time in clock ticks
* since first call to it.
* CLOCKS_PER_SEC: clock ticks per sec.
*/
} while ( clock() < (start + CLOCKS_PER_SEC) );
}
回答
不,clock()给你你的程序使用的 CPU 时间。没有时间过去。
例如,如果您有一个 CPU 并启动该程序的两个实例,它将等待每个实例消耗 1 秒的活动 CPU 时间,即 2 秒。
此外,忙于等待通常是一个坏主意。坚持sleep。