私は2つのmsg queue [sendとreceiveのための別のキュー]を持つ2つのシングルスレッドプロセスA & Bを実装しました。プロセスAはメッセージをBに送信し、受信キューで応答を待ちます。Linuxでプロセス間通信に使用するクロックはどれですか?
私は、プロセスBは10秒後にメッセージを受信した場合B.を処理するために、プロセスAからタイムスタンプを送信したい、私はAにプロセスBからのエラー文字列を送信したい
精度にする必要がありますミリ秒。私が使用したプロセスAでは
、プロセスBでは
struct timespec msg_dispatch_time;
clock_gettime(CLOCK_REALTIME, &msg_dispatch_time);
:
:
add_timestamp_in_msg(msg, msg_dispatch_time);
:
if (msgsnd(msqid, msg, sizeof(msg), msgflg) == -1)
perror("msgop: msgsnd failed");
、
struct timespec msg_dispatch_time;
struct timespec msg_receive_time;
:
clock_gettime(CLOCK_REALTIME, &msg_received_time);
:
if(!(time_diff(msg_received_time, msg_dispatch_time) >= 10))
msgsnd(msqid, &sbuf, buf_length, msg_flag)
else
{
/*send the error string.*/
//msgsnd(msgid,)
}
私の質問を比較するために、ミリ秒の精度で、ここでtime_diff関数を作成する方法)、
1であります10秒?
if(!(time_diff(msg_received_time, msg_dispatch_time) >= 10))
/********Existing time diff code******************/
long int time_diff (struct timeval time1, struct timeval time2)
{
struct timeval diff,
if (time1.tv_usec < time2.tv_usec) {
time1.tv_usec += 1000000;
time1.tv_sec--;
}
diff.tv_usec = time1.tv_usec - time2.tv_usec;
diff.tv_sec = time1.tv_sec - time2.tv_sec;
return diff.tv_sec; //return the diff in second
}
2)clock_gettimeは、同じシステムでプロセス全体で使用すると問題ありませんか?あなたがstruct timespec
タイプを使用して保存しておきたい場合は、その後、私はstruct timespec
タイプの等価difftime()
を使用することをお勧めし
'enum {NS_PER_SECOND = 1000000000}; void sub_timespec(struct timespec t1、struct timespec t2、struct timespec * td) { td-> tv_nsec = t2.tv_nsec - t1.tv_nsec; td-> tv_sec = t2.tv_sec - t1.tv_sec; if(td-> tv_sec> 0 && td-> tv_nsec <0) { td-> tv_nsec + = NS_PER_SECOND; td-> tv_sec--; } else if(td-> tv_sec < 0 && td-> tv_nsec> 0) { td-> tv_nsec - = NS_PER_SECOND; td-> tv_seC++; http://www.gnu.org/software/libc/manual/html_node/Elapsed-Time.html –
チェックtimeval_subtract': 'timeval_subtractは()' 'はなく構造体timeval'ためのものです'struct timespec'よりも、そうではありませんか?しかし、概念は他のタイプにも確実に適用できます。 – PnotNP
@NulledPointerで }} '' –