我正在使用C ++在Mac OS上编写多线程程序,我需要测量它的时间成本。
在这里,我发现一些函数可能对测量时间有用:
#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上测量时间的任何其他功能?
答案 0 :(得分:1)
struct timeval
有两个字段tv_sec
和tv_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也不保证)。
干杯, 罗斯季斯拉夫。