書式#include <ROS / ros.h> の#include <iostreamの> の#include < 文字列 > の#include <CStringの> // 名称空间映射表 の#include " k8s_sum / SumServiceImplPortBinding.nsmap " の#include " k8s_sum / soapSumServiceImplPortBindingProxy.h " // 名前空間stdを使用。 する#include <stdio.hに> する#include <iostreamの> する#include <unistd.h> の#include <fstreamの> する#include <TIME.H> の#includeは<sys / types.h>に 現在の時刻を取得 ダブルgetCurrentTime(){ 構造体;体timevalテレビ にgettimeofday( &テレビ、NULL); // * + tv.tv_usec / 1000 1000 tv.tv_sec返す; // MSが 返す tv.tv_sec * 1000年 + tv.tv_usec / 1000年 tv.tv_usec%+ 1000年 * 0.001 ; // MS進 } //は、アレイ内の平均値を算出 ダブル getAvgDiff(ダブル * 差分){ ダブル SUM = 0.0 ; のため(int型 I = 0 ; IはNUMを<; I ++は){ SUM + = *(差分+ I); } 戻り SUM / NUM; } // 総ハンドラ のボイドハンドル(){ // ファイルへの出力 STD :: ofstreamのFOUT; int型 PID = GETPID(); STD :: 文字列 fileNameに= " を/ tmp / rosSumfile_ " +のstd :: to_stringに(PID)+ " .DAT " ; fout.open(ファイル名、STD ::イオス:: APP); ダブル FIRST_TIME; // 今回の初めに記録 ダブル Last_timeを; / / 最後の時間を記録 ダブル avg_diffを; //平均応答時間 をダブル差分[NUM] = { 0.0 }; のための(int型 I = 0 ; IはNUMを<Iは++ ){ SumServiceImplPortBindingProxy sumWebservice; K8S1__getSum sumRequest; K8S1__getSumResponse RES、 INT A、B; // ランダム2 1-100数 A = RAND()%100 ; B = RAND()%100 ; sumRequest.arg0 = A; sumRequest.arg1 = B; STD :: COUT << " A = " << << A "、B = " << << B STD :: ENDL; のtime_t TT =時間(NULL); // フレーズだけ、最も近い秒にタイムスタンプを返す // ; clock_t START_TIMEの、END_TIME // ミリ秒のこの精度 / / START_TIME =時計(); ダブルSTART_TIME、END_TIME; START_TIME = getCurrentTime(); IF(I == 0 ){ FIRST_TIME = START_TIME; // 最初にログ } FOUT << 「現在のタイムスタンプ(k8s_sum)要求(MS )= " << STD :: to_stringに(START_TIME); int型結果= sumWebservice.getSum(&sumRequest、RES)。 // 睡眠(2); 暂停2秒 であれば(SOAP_OK == 結果) { int型 sum_value = res.return_。 // のtime_t TT1 =時間(NULL)。 END_TIME = getCurrentTime()。 もし(I + 1 == NUM){ last_time = END_TIME。 } FOUT << " 応答(MS)= " << のstd :: to_stringに(END_TIME)。 FOUT << " 差分(MS)= "<< END_TIME-のstart_time << はstd ::てendl; 差分[I] = end_time- START_TIME。 } 他{ FOUT << " 要求はエラーになります!" << はstd ::てendl; } } // 计算平均响应时间 avg_diff = getAvgDiff(差分)。 FOUT << " カウントFIRSTTIME = " <<のstd :: to_stringに(FIRST_TIME)<< "lastTime = " <<のstd :: to_stringに(last_time)<< "avgDiff = " << avg_diff << はstd :: ENDL。 fout.close(); } int型のmain(int型のargc、char型 ** ARGV) { ROS ::のinit(argcの、ARGV、" k8s_sum_node " ); pid_t pidの; // 子プロセスを作成する ために(int型私= 0 ;私<FORK_NUM、私は++ ){ PID = フォーク(); // 子プロセスがループを終了し、もはや子プロセス、一次プロセスによって作成されたすべての子プロセスを作成し、ここで重要ではない IF(PIDの== 0 || PID == - 1 ){ BREAK ; } } IF( == PID - 。1 ){ ROS_INFO("失敗するフォーク!" ); 出口(1。); } 他の IF(PIDの== 0 ){ // 子プロセス処理ロジックの ハンドル(); SLEEP(5 ); 終了(0 ); } 他{ // メイン処理プロセス論理 ハンドル(); 終了(0 ); } ROS ::スピン(); 戻り 0 ; }
プログラムROSを使用して
これは、Webサービスの加算器、和をシミュレート