我很难制作一个场景,它会显示调用简单本地函数与相同函数之间但在子进程内的时间差。我正在测试的特定函数显示本地函数和子进程的difftime(x,y)函数没有差异(时间= 0)。有人可以概括这两种做同样事情的方法的潜在时差吗?
作为旁注,我尝试将每个任务执行1000次,然后将时间除以1000,但即使这样,返回的时间也是0.例如,我有:
time(&start);
for(int i = 0; i<1000; i++){
reply[i] = my_channel.send_request("hello");
}
time(&end);
time_req_1 = difftime(end,start);
时间返回“time_req_1”= 0。 我只是把这个代码段放在以防万一我做错了。
答案 0 :(得分:3)
您必须记住time
的分辨率是以秒为单位。一种常见的时间方式,例如函数调用是使用clock
:
clock_t start_time = clock();
some_lengthy_function_call();
clock_t end_time = clock();
printf("Elapsed time: %.02f seconds\n",
(double) (end_time - start_time) / CLOCKS_PER_SEC);
修改:如果您想要比clock
提供更高的准确度和分辨率,请参阅Jonathan Leffler对您的问题的评论。
答案 1 :(得分:1)
在大多数具有大多数操作系统的机器上,时间仅精确到一秒钟。对于仅1000次迭代,您需要在架构上找到更准确的时间函数。
相对便携的界面是clock()
。我最后一次在带有MSVC的Windows下试用它,准确度是18ms。
答案 2 :(得分:0)
对于问题的第一部分,您需要确保在fork调用之后,您还没有调用exec
。
在你的第二部分中,嗯......它的运行速度太快difftime
尝试使用gettimeofday()
它会给你高达微秒