我希望计算API返回值所花费的时间.这种行动所花费的时间是纳秒秒.由于API是C++类/函数,我使用timer.h来计算相同的:
#include <ctime>
#include <cstdio>
using namespace std;
int main(int argc, char** argv) {
clock_t start;
double diff;
start = clock();
diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;
cout<<"printf: "<< diff <<'\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了以秒为单位的时间.如何在毫秒秒内获得相同的精度?
在Windows上,clock()以毫秒为单位返回时间,但是在我正在处理的这个Linux机器上,它将它舍入到最接近的1000,因此精度仅为"秒"级别而不是毫秒级别.
我找到了一个使用QTime该类的Qt解决方案,实例化一个对象并调用start()它然后调用elapsed()以获得经过的毫秒数.
我有点幸运,因为我开始使用Qt,但我想要一个不依赖第三方库的解决方案,
有没有标准的方法来做到这一点?
UPDATE
请不要推荐Boost ..
如果Boost和Qt可以做到这一点,那肯定不是魔术,必须有他们正在使用的标准!
我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?
我正在将一个库从Windows移植到*NIX(目前是OSX),现在有人可以使用什么功能代替Microsoft的QueryPerformanceCounter和QueryPerformanceFrequency?
我在qnx momemntics上运行以下代码.
#define BILLION 1000000000L;
struct timespec start_time;
struct timespec stop_time;
void start MyTestFunc() {
//Initialize the Test Start time
clock_gettime(CLOCK_REALTIME,&start_time)
// ... additonal code.
cout << "The exectuion time of func "<< calculateExecutionTime();
}
double calculateExecutionTime ()
{
clock_gettime(CLOCK_REALTIME,&stop_time);
double dSeconds = (stop_time.tv_sec - start_time.tv_sec);
double dNanoSeconds = (double)( stop_time.tv_nsec - start_time.tv_nsec ) / BILLION;
return dSeconds + dNanoSeconds;
}
Run Code Online (Sandbox Code Playgroud)
现在我想将代码移植到Windows上.任何人都可以提供示例代码.
谢谢!
我想测量循环中函数的速度.但是为什么我这样做的方式总是打印"0"而不是9位十进制精度(即纳秒/微秒)的高分辨率时序?
这样做的正确方法是什么?
#include <iomanip>
#include <iostream>
#include <time.h>
int main() {
for (int i = 0; i <100; i++) {
std::clock_t startTime = std::clock();
// a very fast function in the middle
cout << "Time: " << setprecision(9) << (clock() - startTime + 0.00)/CLOCKS_PER_SEC << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图计算一个函数用来运行的滴答数,并使用这样的clock()函数来计算:
unsigned long time = clock();
myfunction();
unsigned long time2 = clock() - time;
printf("time elapsed : %lu",time2);
Run Code Online (Sandbox Code Playgroud)
但问题是它返回的值是10000的倍数,我认为是CLOCK_PER_SECOND.是否存在更精确的方法或等效函数值?
我使用的是64位Ubuntu,但如果该解决方案可以在Windows和Mac OS等其他系统上运行,我更愿意.
这是"算法",但是当我想测量执行时间时,它给我零.为什么?
#define ARRAY_SIZE 10000
...
clock_t start, end;
start = clock();
for( i = 0; i < ARRAY_SIZE; i++)
{
non_parallel[i] = vec[i] * vec[i];
}
end = clock();
printf( "Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC );
Run Code Online (Sandbox Code Playgroud)
那么我该怎么做来衡量时间呢?
我正在尝试用C++编写的代码.我有一个内部和外部循环,我想分开时间,但同时.由于某种原因,当我这样做时,其中一个实例返回1.84467e + 13并且总是这个确切的数字.
为什么会这样?
这是一个在我的机器上复制效果的最小工作示例:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
long int i, j;
clock_t start, finish, tick, tock;
double a = 0.0;
double adding_time, runtime;
start = clock();
for(i=0; i<10; i++)
{
a=0.0;
tick =clock();
for(j=0; j<10000000; j++)
{
a+=1;
}
tock= clock();
adding_time = (double)(tick - tock)/CLOCKS_PER_SEC;
cout << "Computation time:" << adding_time << endl;
}
finish = clock();
runtime = (double)(finish - start)/CLOCKS_PER_SEC;
cout << "Total computation time:" << runtime …Run Code Online (Sandbox Code Playgroud) 我已经用C(小型个人项目)制作了一些视频游戏.而我每次遇到的问题都是一样的,如何管理游戏中的周期.
例如,我用SFML编写了一条蛇.我使用帧速率处理周期:正常情况下5帧速率,并且通电后,我将其更改为10.这是有效的.但它很可怕.并且它对于坏的计算机无法正常工作.同样的想法,我也做了一个游戏,我决定一个循环等于一个循环的转弯(有一个无限循环).同样的问题,高性能计算机将比低速计算机快.
所以,有人可以建议我如何在视频游戏中正确和正确地进行周期管理.
提前致谢 !
我的驱动器上有一些扇区读数很差.我可以衡量每个部门所需的阅读时间,然后比较好部门和坏部门的时间.
我可以使用处理器的计时器进行测量.如何在C/Assembly中编写程序来衡量每个扇区读取的确切时间?
所以程序将是这样的:
Start the timer
Read the disk sector
Stop the timer
Read the time measured by the timer
Run Code Online (Sandbox Code Playgroud) 我希望能够获得在我的C++程序中执行某些操作所需的纳秒数.
对象创建,函数执行它的时间等等.
在Java,我们做的事情是这样的:
long now = System.currentTimeMillis();
// stuff
long diff = (System.currentTimeMillis() - now);
Run Code Online (Sandbox Code Playgroud)
你会如何在C++中做同样的事情?