没有标准库如何制作自己的计时器?
How can I make my own timer without standard library?
是否有一些特定的迭代次数,我可以使用 for loop
,以便完全执行循环只需要 1 秒?例如下面的代码在我的机器上执行了 0.125 秒:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
long long a=0;
for (a=0;a<=pow(10,4);a++);
}
不过,a <= 8*pow(10,4) 花费了 0.206 秒。编译器是 GCC 4.9.2。 IDE 是代码块。
我的电脑规格:OS:Windows 8.1
我根据收到的评论发布了您问题的答案。
无法制作计时器,因为:
- 迭代所花费的时间是不可预测的,这不仅取决于所使用的 CPU,还需要考虑电源管理和调度程序。 (来自 tux3)
必须使用实时 OS 才能完成。非实时 OSs 抖动太多。 Windows 可以决定暂时安排其他进程,或者使用 CPU 例如内核网络、磁盘 I/O 等抢占时间。 (按编号)
不能在托管环境中仅使用标准 C++ "make own timer"。计时器本质上是一种与 OS 调度程序通信的机制,为此需要特定于平台的 OS 服务。 (作者:Kerrek SB)
编译器会优化这样的循环,并通过死代码消除将其删除(由 πìντα ῥεῖ 和 Jongware)。
是否有一些特定的迭代次数,我可以使用 for loop
,以便完全执行循环只需要 1 秒?例如下面的代码在我的机器上执行了 0.125 秒:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
long long a=0;
for (a=0;a<=pow(10,4);a++);
}
不过,a <= 8*pow(10,4) 花费了 0.206 秒。编译器是 GCC 4.9.2。 IDE 是代码块。
我的电脑规格:OS:Windows 8.1
我根据收到的评论发布了您问题的答案。
无法制作计时器,因为:
- 迭代所花费的时间是不可预测的,这不仅取决于所使用的 CPU,还需要考虑电源管理和调度程序。 (来自 tux3)
必须使用实时 OS 才能完成。非实时 OSs 抖动太多。 Windows 可以决定暂时安排其他进程,或者使用 CPU 例如内核网络、磁盘 I/O 等抢占时间。 (按编号)
不能在托管环境中仅使用标准 C++ "make own timer"。计时器本质上是一种与 OS 调度程序通信的机制,为此需要特定于平台的 OS 服务。 (作者:Kerrek SB)
编译器会优化这样的循环,并通过死代码消除将其删除(由 πìντα ῥεῖ 和 Jongware)。