0

我很难制作一个场景,该场景将显示调用简单本地函数与调用相同函数但在子进程内的时间差。我正在测试的特定函数显示本地函数和子进程的 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 返回的时间。我只将这个代码段放入以防万一我做错了什么。

4

3 回答 3

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 对您的问题的评论。

于 2012-07-17T13:55:29.600 回答
1

在大多数操作系统的大多数机器上,时间只能精确到一秒。对于仅 1000 次迭代,您需要在架构上找到更准确的时间函数。

一个相对便携的界面是clock(). 上次在windows下用MSVC试了一下,准确度是18ms。

于 2012-07-17T13:55:24.597 回答
0

对于您问题的第一部分,您需要确保在 fork 调用之后,您没有调用exec.

在你的第二部分,嗯......它的运行速度太快了difftime尝试使用gettimeofday()它会给你带来微秒

于 2012-07-17T13:57:20.547 回答