首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:使用Clock()来测量多线程程序中的时间。

C:使用Clock()来测量多线程程序中的时间。
EN

Stack Overflow用户
提问于 2018-06-06 04:48:16
回答 2查看 0关注 0票数 0

使用clock()来衡量我的应用程序从开始到结束所花费的时间,因为;

代码语言:javascript
运行
复制
int main(int argc, char *argv[]) {
  const clock_t START = clock();

  // ...

  const double T_ELAPSED = (double)(clock() - START) / CLOCKS_PER_SEC;
}

自从我开始使用POSIX线程以来,这似乎失败了。看起来clock()使用N个线程增加了N倍。由于我不知道有多少线程将同时运行,因此此方法失败。

EN

回答 2

Stack Overflow用户

发布于 2018-06-06 13:20:34

clock()测量你的进程使用的CPU时间,而不是挂钟时间。当你有多个线程同时运行时,你显然可以更快地消耗CPU时间。

如果想知道挂钟执行时间,则需要使用适当的功能。ANSI C中唯一一个time(),通常只有1秒的分辨率。

然而,正如你所说你正在使用POSIX,这意味着你可以使用clock_gettime(),定义在time.h。将CLOCK_MONOTONIC在特定的时钟是最好用这样的:

代码语言:javascript
运行
复制
struct timespec start, finish;
double elapsed;

clock_gettime(CLOCK_MONOTONIC, &start);

/* ... */

clock_gettime(CLOCK_MONOTONIC, &finish);

elapsed = (finish.tv_sec - start.tv_sec);
elapsed += (finish.tv_nsec - start.tv_nsec) / 1000000000.0;

(请注意,我已elapsed仔细计算以确保在计算非常短的时间间隔时精度不会丢失)。

如果你的操作系统没有提供CLOCK_MONOTONIC(你可以在运行时检查sysconf(_SC_MONOTONIC_CLOCK)),那么你可以用它CLOCK_REALTIME作为回退

票数 0
EN

Stack Overflow用户

发布于 2018-06-06 14:48:00

可以使用time.h中的time()作为第二个分辨率。如果你需要更高的分辨率,那么你可以使用更多系统特定的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档