线程更改的执行时间

时间:2016-08-17 11:10:42

标签: c++ multithreading

我使用此方法:Measure execution time in C (on Windows)来衡量所有线程的执行时间。我在Windows上,而且我使用的是VC ++。

这样的事情:

//initialize start, end, frequency
std::thread thread1(...); 
// and so on I initialise all the threads

thread1.join();
//join all threads

//time = (start-end)/frequency
printf(time);

我多次运行它,我经常得到不同的执行时间。我喜欢30%的变化。(这意味着我得到的值在100到70之间)。我不明白为什么? 30%不是我的小变化。

由于

2 个答案:

答案 0 :(得分:0)

许多事情都会影响执行时间,从系统负载到内存使用到星形对齐。您没有指定执行时间的顺序,但是对于较低的值,30%的偏差当然不是闻所未闻的。主要的好处是,执行时间本身基本上不会告诉我们系统。

答案 1 :(得分:0)

QueryPerformanceCounter是一个系统范围的计数器,因此您的结果取决于系统负载和进程调度的详细信息。

您可以使用返回

QueryProcessCycleTime
  

进程线程使用的CPU时钟周期数。该值包括在用户模式和内核模式下花费的周期。

您可以使用GetCurrentProcess获取当前流程的句柄。