有人可以给我一个关于这个功能的解释吗?

时间:2016-02-04 08:58:14

标签: c

我一直想要一个暂停功能,我找到了这个。作为C语言的初学者,我无法确定,但它看起来像<clock.h>中的函数。 我想在我的代码中实现它,但不是没有理解它。

void wait(int seconds){
    clock_t start, end;
    start = clock();
    end = clock();
    while (((end-start) / CLOCKS_PER_SEC) = !seconds)
        end = clock();
}

4 个答案:

答案 0 :(得分:5)

它只是一个忙等待循环,这是一种非常讨厌的实现延迟的方法,因为它在没有做任何事情时将CPU固定在100%。请改用sleep()

#include <unistd.h>

void wait(int seconds)
{
    sleep(seconds);
}

另请注意,问题中给出的代码是错误的:

while (((end-start) / CLOCKS_PER_SEC) = !seconds)

应该是:

while (((end-start) / CLOCKS_PER_SEC) != seconds)

或更好:

while (((end-start) / CLOCKS_PER_SEC) < seconds)

(但如上所述,你甚至不应该使用这个代码。)

答案 1 :(得分:1)

通常,clock_t是库中的结构。它返回从程序启动到结束或直到您想要计算时间所经过的时钟滴答数。

如果您想了解更多信息,可以在此处阅读详细信息:http://www.tutorialspoint.com/c_standard_library/c_function_clock.htm

答案 2 :(得分:1)

clock()函数返回自程序开始执行以来发生的系统时钟周期数。 这是原型: clock_t clock(void);

请注意,返回值不是以秒为单位。要将结果转换为秒,您必须将返回值除以 CLOCKS_PER_SEC 宏。 你的程序就是这样做的。在功能上它会停止程序执行秒(您将此值作为参数传递给等待函数)。

顺便说一句,它使用 time.h ,而不是 clock.h 。并且开始学习 C 是不正确的。

要了解详情:http://www.cplusplus.com/reference/ctime/?kw=time.h

答案 3 :(得分:1)

clock中的

<ctime>功能:

  

返回程序消耗的处理器时间。

     

返回的值以时钟周期表示,单位为   一个恒定但系统特定长度的时间(关系为   每秒CLOCKS_PER_SEC时钟滴答声。)

reference

因此,基本上它返回自程序启动以来传递的处理器滴答数。虽然处理器滴答是process执行的处理器指令的数量,但它不考虑IO时间以及任何不使用CPU的时间。

CLOCKS_PER_SEC是机器执行的CPU滴答的平均数量,因机器而异,即使它(可能)也会不时地改变,因为执行过多的IO会导致每个进程整体减少{{1}因为不使用CPU会花费更多时间。

此声明:CLOCKS_PER_SEC 是不正确的,因为正确的实现是

(end-start) / CLOCKS_PER_SEC) = !seconds

busy waiting程序的技巧是否会被困在这个while循环中,直到while (((end-start) / CLOCKS_PER_SEC) != seconds) end = clock(); 秒将使用CPU时钟和CLOCKS_PER_SEC传递来确定时间过去。

虽然我建议将其更改为:

seconds

因为如果进程的优先级低,或者计算机太繁忙处理很多进程,那么一个CPU滴答可能需要一秒以上(可能是系统崩溃时,对于一些占用大量资源且占用率高的错误程序足够的优先级导致CPU饥饿)。

最后,我建议不要使用它,因为你在等待时仍在使用CPU,这可以通过使用here

讨论的睡眠工具来避免