【发布时间】:2014-02-05 18:09:13
【问题描述】:
我正在尝试编写一个在计算期间运行的“实时”计时器。它应该连续输出自计算开始以来的秒数 - 类似于进度条。到目前为止我是这样做的:
#include <conio.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
clock_t t;
t = clock();
while (!_kbhit())
{
t = clock() - t;
printf("%f", ((float)t) / CLOCKS_PER_SEC);
system("cls");
}
return 0;
}
但是有几个问题:
- 由于
system("cls")的调用而闪烁。 - 由于
printf()的连续调用,目前时间不正确
有没有一种相当简单的方法可以用 C 来做到这一点?
【问题讨论】:
-
@H2CO3 所说的。另外,如果您不想闪烁,请不要使用
cls。只需执行第一个printf,然后执行类似 CR (\\r) 或退格键之类的操作,以在每次迭代时覆盖屏幕上的数字。或者使用curses库。 -
没有多线程可以吗?
-
其实就看作为实际动作做了什么。如果这可以通过异步系统调用完成,那么您也可以在主线程中打印进度,但是如果您需要阻塞,那么您需要多线程。至于闪烁,打印回车应该可以将文本指针移动到行首。如果它只是数学问题,您可以估计更新进度并仍将其打印在与计算相同的线程中的合理频率。
-
你说结果不正确但是你确定
t = clock() - t是你想要的吗?你得到了什么结果,你期待什么? -
真的必须那么准确吗?当然,只是表明某事正在发生并且没有停止可能就足够了。如果是这样,那么只需将更新放在不同位置的任务栏。