Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 测量标准:系统';以C++;_C++_Performance_Time_Stl - Fatal编程技术网

C++ 测量标准:系统';以C++;

C++ 测量标准:系统';以C++;,c++,performance,time,stl,C++,Performance,Time,Stl,是否可以测量std::system(…)的执行时间 或者函数立即返回,但这是不可能的,在这种情况下,有没有其他方法来衡量分叉程序的执行情况 谢谢任何帮助。 < P>这是特定于实现的(因为AFIU,C++标准对代码< STD::Stult所使用的命令处理器没有太多的说明;命令处理器可能甚至不运行任何外部进程)。 但是让我们把注意力集中在Linux上(或者至少集中在其他类似POSIX的系统上)。然后,您可以使用较低级别的系统调用,并使用由成功的wait4调用填充的struct rusage(有关详细

是否可以测量std::system(…)的执行时间

或者函数立即返回,但这是不可能的,在这种情况下,有没有其他方法来衡量分叉程序的执行情况


谢谢任何帮助。

< P>这是特定于实现的(因为AFIU,C++标准对代码< STD::Stult所使用的命令处理器没有太多的说明;命令处理器可能甚至不运行任何外部进程)。 但是让我们把注意力集中在Linux上(或者至少集中在其他类似POSIX的系统上)。然后,您可以使用较低级别的系统调用,并使用由成功的
wait4
调用填充的
struct rusage
(有关详细信息,请参阅),特别是为了获得CPU时间。如果您只需要经过的实时时间,请使用(或较低级别的内容,如…)

请注意,标准C函数提供了有关处理器时间的信息(当前),因此不会测量分叉子进程(通过
std::system
)将消耗的资源。

尝试此代码(对于Linux和POSIX)

#包括
#包括
#包括
#包括
#包括
结构tms st_时间;
结构tms ed_时间;
int main()
{
时间(&st_时间);
std::系统(“您的呼叫”);
时间(&ed_时间);

std::cout除非您正在查看的系统既不是POSIX,也不是具有类似sh的外壳或Windows的系统,
std::system
是同步的,并返回命令的结果。您可以使用标准来测量墙时间:

#include <chrono>
#include <cstdlib>
#include <iostream>

int main()
{
    auto before = std::chrono::high_resolution_clock::now();
    std::system("sleep 3");
    auto after = std::chrono::high_resolution_clock::now();

    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
        after - before);

    std::cout << "It took " << duration.count() << " microseconds\n";
}
#包括
#包括
#包括
int main()
{
auto before=std::chrono::高分辨率时钟::now();
std::系统(“睡眠3”);
auto after=std::chrono::高分辨率时钟::现在();
自动持续时间=标准::计时::持续时间(
之后-之前);

std::cout
system
是关于执行一个命令的。假设它是linux,因为您使用了“fork”。
system(“time”您的_命令)
已经足够了,尽管时间消耗被打印到终端上。如果您想像其他子例程一样测量
系统
调用时间,您可以转到
rdtsc
/
gettimeofday
/…(
time
in time.h不建议使用,因为它只能返回当前秒,并且没有用处)无法工作。在POSIX系统上
clock()是阻塞,它等待它返回,然后检查状态是否正常返回,然后才计算时间,您能告诉我出了什么问题吗?@BasileStarynkevitch
clock
测量当前进程(不包括子进程)的处理器时间我理解,但system()是阻塞,这意味着在系统返回之前父级将被挂起,这就是时钟()的原因调用以获取上一次调用之间的时差。是的,你是对的!我已编辑代码以实现另一个逻辑@BasileStrynekVitch。感谢指出!感谢回答。我的问题是
std::system
执行得太快。因此,现在我可以精确测量速度:)
#include <chrono>
#include <cstdlib>
#include <iostream>

int main()
{
    auto before = std::chrono::high_resolution_clock::now();
    std::system("sleep 3");
    auto after = std::chrono::high_resolution_clock::now();

    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
        after - before);

    std::cout << "It took " << duration.count() << " microseconds\n";
}