0

単純なローカル関数の呼び出しと同じ関数の呼び出しの間に子プロセス内での時間差を表示するシナリオを作成するのに苦労しています。私がテストしている特定の関数は、ローカル関数と子プロセスの両方のdifftime(x、y)関数に違いがない(time = 0)ことを示しています。誰かが同じことをするこれらの2つの方法で潜在的な時差を一般化することができますか?

ちなみに、各タスクを1000回実行してから、時間を1000で割ってみましたが、それでも返される時間は0です。たとえば、次のようになります。

time(&start);    
for(int i = 0; i<1000; i++){
  reply[i] = my_channel.send_request("hello");
}
time(&end);
time_req_1 = difftime(end,start);

そして、「time_req_1」= 0の場合に返される時間。何か間違ったことをした場合に備えて、このコードセグメントのみを挿入します。

4

3 に答える 3

3

timeの解像度は秒単位であることを覚えておく必要があります。時間を計る一般的な方法、たとえば関数呼び出しは、以下を使用することclockです。

clock_t start_time = clock();

some_lengthy_function_call();

clock_t end_time = clock();

printf("Elapsed time: %.02f seconds\n",
       (double) (end_time - start_time) / CLOCKS_PER_SEC);

編集:提供できるよりもさらに優れた精度と解像度が必要なclock場合は、質問に対するJonathanLefflerのコメントを参照してください。

于 2012-07-17T13:55:29.600 に答える
1

ほとんどのOSを搭載したほとんどのマシンでは、時間は1秒までしか正確ではありません。たった1000回の反復で、アーキテクチャ上でより正確な時間関数を見つける必要があります。

比較的ポータブルなインターフェースはclock()です。前回MSVCを使用してWindowsで試したとき、精度は18msでした。

于 2012-07-17T13:55:24.597 に答える
0

質問の最初の部分では、フォーク呼び出しの後で、を呼び出していないことを確認する必要がありますexec

2番目の部分では、まあ...実行速度が速すぎdifftimeて使用してみてgettimeofday()ください最大マイクロ秒になります

于 2012-07-17T13:57:20.547 に答える