是否可以測量std::system(...)
的執行時間?在C++中測量std :: system的實際執行時間
或者,也許函數立即返回,這是不可能的,在這種情況下是否有任何其他方式來衡量分叉程序的執行?
感謝您的任何幫助。
是否可以測量std::system(...)
的執行時間?在C++中測量std :: system的實際執行時間
或者,也許函數立即返回,這是不可能的,在這種情況下是否有任何其他方式來衡量分叉程序的執行?
感謝您的任何幫助。
除非你正在尋找一個系統既不是POSIX與SH-像貝殼也不支持Windows,std::system
是同步的,返回的結果命令。您可以使用標準的high resolution timer測量牆時間:
#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";
}
如果你是在所使用的CPU處理時間量相當感興趣,我不認爲C++有一個標準的,跨平臺的方式提供給你。
感謝您的回答。我的問題實際上是'std :: system'執行得太快。所以,現在我可以測量到底多快:) – CpCd0y
它是特定於實現的(因爲AFAIU,C++標準沒有詳細說明std::system
使用的命令處理器;該命令處理器可能甚至不運行任何外部進程)。
但讓我們關注Linux(或至少在其他POSIX系統)上的。然後,您可以使用較低級別的系統調用fork(2),execve(2),wait4(2)並使用struct rusage
(請參閱getrusage(2)以獲取詳細信息)填充該成功的wait4
調用,特別是獲取CPU時間。如果你只想經過真正時間,使用<chrono>
C++ facilities(或下級time(7)的東西,如clock_gettime(2) ...)
注意,clock標準C函數提供了有關處理器時間(在電流process)所以不會測量分叉子進程(由std::system
)會消耗什麼。
試試這個代碼(對於Linux & POSIX),
#include<time.h>
#include<sys/types.h>
#include<sys/wait.h>
#include <iostream>
#include <cstdlib>
struct tms st_time;
struct tms ed_time;
int main()
{
times(&st_time);
std::system("your call");
times(&ed_time);
std::cout<<"Total child process time ="
<<((ed_time.tms_cutime - st_time.tms_cutime)
+(ed_time.tms_cstime - st_time.tms_cstime))/CLOCKS_PER_SEC;
}
不起作用。在POSIX系統上'clock()' - see [clock(3)](http://man7.org/linux/man-pages/man3/clock.3.html)...-給出了當前進程的近似值CPU時間(不包括子進程)。 Windows被稱爲是有缺陷的,因爲它的「時鐘」給出了 - 正確 - 實際使用時間的粗略近似值 –
順便說一句,你的代碼是C,並且OP詢問關於C++ –
即使答案錯誤的版本 –
'系統'是關於執行一個命令。假設它是linux,因爲你使用了'fork'。 'system(「time」YOUR_COMMAND)'就足夠了,儘管時間消耗被打印到終端。 – Thiner
如果你想象測量其他子程序一樣測量系統調用時間,你可以轉到'rdtsc' /'gettimeofday'/...(time.h中的'time'是不推薦的,因爲它只能返回當前秒,並沒有用) – Thiner