我希望计算API返回值所花费的时间.这种行动所花费的时间是纳秒秒.由于API是C++类/函数,我使用timer.h来计算相同的:
#include <ctime>
#include <cstdio>
using namespace std;
int main(int argc, char** argv) {
clock_t start;
double diff;
start = clock();
diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;
cout<<"printf: "<< diff <<'\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了以秒为单位的时间.如何在毫秒秒内获得相同的精度?
我的项目(C#,VS2010,.NET 4.0)要求特定for循环必须在200毫秒内完成.如果没有那么它必须在此持续时间之后终止而不执行剩余的迭代.循环通常i = 0达到约500,000到700,000,因此总循环时间变化.
我读过以下类似的问题,但在我的案例中没有帮助:
到目前为止,我已经尝试使用一个Stopwatch对象来跟踪已用时间,但它对我不起作用.到目前为止,我尝试了两种不同的方法:
方法1.比较for循环中的经过时间:
Stopwatch sw = new Stopwatch();
sw.Start();
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
break;
}
sw.Stop();
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为完成if (sw.Elapsed > TimeSpan.FromMilliseconds(200))时间超过200毫秒.因此在我的情况下毫无用处.我不确定是否 TimeSpan.FromMilliseconds()通常需要这么长时间,或者仅仅因为某些原因而在我的情况下.
方法2.创建一个单独的线程来比较时间:
Stopwatch sw = new Stopwatch();
sw.Start();
bool bDoExit = false;
int msLimit = 200;
System.Threading.ThreadPool.QueueUserWorkItem((x) => …Run Code Online (Sandbox Code Playgroud) 我需要实现一个函数,该函数应在指定的持续时间内执行指定的任务,并将其作为参数传递给它(std::chrono::milliseconds)。
我想出了代码:
void Run(std::chrono::milliseconds ms)
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
while (elapsed_seconds <= (ms / 1000))
{
std::cout << "Running" << std::endl;
end = std::chrono::system_clock::now();
elapsed_seconds = end - start;
}
}
int main()
{
{
std::chrono::milliseconds ms(30000);
Run(ms);
system("Pause");
}
Run Code Online (Sandbox Code Playgroud)
我想将代码打印Running30秒钟,然后退出。但是它没有这样做。我该如何实现这种行为C++ <chrono>