如何使用C ++测量Mac OS上多线程程序的时间成本?

时间:2015-08-26 23:23:04

标签: c++ multithreading macos

我正在使用C ++在Mac OS上编写多线程程序,我需要测量它的时间成本。

在这里,我发现一些函数可能对测量时间有用:

  1. clock():对于多线程程序,它不准确。
  2. time():它可以测量时间但只有第二精度。
  3. gettimeofday():我写了一个样本来测试它,但时间测量得错了。

  4. #include <stdio.h>
    #include <iostream>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    using namespace std;
    
    int main()
    {
        timeval start, finish;
        gettimeofday(&start,NULL);
    
        sleep(10); //sleep for 10 sec
    
        gettimeofday(&finish,NULL);
    
        cout<<(finish.tv_usec-start.tv_usec)/1000.0<<"ms"<<endl;
    
    
        return 0;
    
    }
    

    输出只有几毫秒,我不知道为什么。

    有没有人知道在Mac OS上测量时间的任何其他功能?

2 个答案:

答案 0 :(得分:1)

struct timeval有两个字段tv_sectv_usec。你忽略了tv_sec,从而丢掉了最重要的部分时间。

答案 1 :(得分:1)

最好的解决方案是使用<chrono>功能(当然这意味着您正在使用支持c ++ 11的编译器)。

然后您的代码可能如下所示:

 #include <iostream>

 #include <chrono>
 #include <thread>

 using namespace std;
 using namespace std::chrono;

 int main()
 {
     auto start = high_resolution_clock::now();

     std::this_thread::sleep_for(10s); //sleep for 10 sec

     cout << duration_cast<milliseconds>(high_resolution_clock::now() - start).count() << "ms\n";

     return 0;

 }

请注意,我还使用整齐的时间文字指定10s,这是c ++ 14的功能。如果它不可用,请改用seconds(10)

但是请注意,由于允许操作系统暂停线程更长时间,因此输出不能保证为“10000ms” - 请参阅here(unistd one也不保证)。

干杯,    罗斯季斯拉夫。