该程序是数据库和应用程序之间的中间件。对于每个数据库访问,我大多数以毫秒为单位计算时间长度。下面的示例是使用Builder库中的TDateTime。我必须尽可能只使用标准的c ++库。
AnsiString TimeInMilliseconds(TDateTime t) { Word Hour, Min, Sec, MSec; DecodeTime(t, Hour, Min, Sec, MSec); long ms = MSec + Sec * 1000 + Min * 1000 * 60 + Hour * 1000 * 60 * 60; return IntToStr(ms); }
// computing times
TDateTime SelectStart = Now();
sql_manipulation_statement();
TDateTime SelectEnd = Now();
答案 0 :(得分:7)
在Windows和POSIX兼容系统(Linux,OSX等)上,您可以使用clock()
中的<ctime>
计算呼叫的时间,以1 / CLOCKS_PER_SEC(计时器滴答)为单位。该调用的返回值将是程序开始运行后经过的时间(以毫秒为单位)。然后可以相互减去对clock()
的两次调用,以计算给定代码块的运行时间。
例如:
#include <ctime>
#include <cstdio>
clock_t time_a = clock();
//...run block of code
clock_t time_b = clock();
if (time_a == ((clock_t)-1) || time_b == ((clock_t)-1))
{
perror("Unable to calculate elapsed time");
}
else
{
unsigned int total_time_ticks = (unsigned int)(time_b - time_a);
}
编辑:您无法直接比较POSIX兼容平台到Windows平台的时序,因为在Windows上clock()
测量挂钟时间,在POSIX系统上,它测量经过的CPU时间。但它是标准C ++库中的一个函数,并且用于比较同一平台上不同代码块之间的性能,应该符合您的需求。
答案 1 :(得分:4)
在Windows上,您可以使用GetTickCount (MSDN)这将给出自系统启动以来经过的毫秒数。在通话前后使用此功能,您将获得通话所需的毫秒数。
DWORD start = GetTickCount();
//Do your stuff
DWORD end = GetTickCount();
cout << "the call took " << (end - start) << " ms";
编辑: 正如Jason所说,Clock();会更好,因为它与Windows无关。