问下那个c++中的clock()函数相减得到的数的单位到底是什么啊,搜了下都说是毫秒,但试了下感觉
发布网友
发布时间:2022-05-01 03:28
我来回答
共5个回答
热心网友
时间:2023-10-03 07:37
clock () 函数送返 从程序开始运行 到 调用时的时间 间隔,单位是毫秒。
例如,等待多少毫秒可调用函数:
void wait_ms ( int ms )
{
clock_t endwait;
endwait = clock () + ms;
while (clock() < endwait) {}
}
wait_ms(123); 就可等待123毫秒。
clock () 函数有一定的精度误差。
精确计时可用计算机时钟:
例如:Pentium芯片汇编指令
// Pentium instruction "Read Time Stamp Counter".
__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();}
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; }
例如:用 QueryPerformanceCounter()函数
void accurate_dt_ms()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
int executionTime;
double dt,d_freq,d_begin_t,d_end_t;
// Start of time interval
QueryPerformanceFrequency(&nFreq);
d_freq = (double) nFreq.QuadPart;
QueryPerformanceCounter(&nBeginTime);
// Any code
// ...
wait_ms(123); //检查clock() 函数是否精确
// End of time interval
QueryPerformanceCounter(&nEndTime);
// time interval in ms
executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;
dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;
printf("==============\naccurate_dt_ms:\n");
printf("dt=%d in ms or dt=%lf ms\n", executionTime,dt);
}
热心网友
时间:2023-10-03 07:37
你可以把你的程序拍照一下。
一般是clock_t格式的,你可以试着除以 CLOCKS_PER_SEC 试试
start= clock();
dt = (clock()- start) / CLOCKS_PER_SEC; (单位:时钟秒数)。追问
除以CLOCKS_PER_SEC 的话只是相当于除以1000,之前试过。我不解的是,如果单位是毫秒的话,那第一张图中最后一个示例相当于运行了50多秒,可实际上感觉一秒钟不到它就输出来了
热心网友
时间:2023-10-03 07:37
正确答案:在mac和Linux下CLOCKS_PER_SEC是10的6次方。windows下CLOCKS_PER_SEC是10的3次方。所以不一样系统出来的结果不一样!
热心网友
时间:2023-10-03 07:38
不追问?
热心网友
时间:2023-10-03 07:39
1追问?