0

timersub(struct timeval *a, struct timeval *b, struct timeval *res)時間通りに運用するために使用しています。そして、私がしたいことは、より高い値をより低い値に引き、負の時間差を取得することです.

例えば ​​:

int             main()
{
  struct timeval        left_operand;
  struct timeval        right_operand;
  struct timeval        res;

  left_operand.tv_sec = 0;
  left_operand.tv_usec = 0;
  right_operand.tv_sec = 0;
  right_operand.tv_usec = 1;
  timersub(&left_operand, &right_operand, &res);
  printf("RES : Secondes : %ld\nMicroseconds: %ld\n\n", res.tv_sec, res.tv_usec);
  return 0;
 }

出力は次のとおりです。 RES : Secondes : -1 Microseconds: 999999

私がしたいのは:RES : Secondes : 0 Microseconds: 1

誰かがそのトリックを知っていますか? 結果を構造体 timeval にも保存したいと思います。

4

1 に答える 1

3

どちらの時間値が大きいかを確認して、オペランドを提供する順序を決定します。

if (left_operand.tv_sec > right_operand.tv_sec)
    timersub(&left_operand, &right_operand, &res);
else if (left_operand.tv_sec < right_operand.tv_sec)
    timersub(&right_operand, &left_operand, &res);
else  // left_operand.tv_sec == right_operand.tv_sec
{
    if (left_operand.tv_usec >= right_operand.tv_usec)
        timersub(&left_operand, &right_operand, &res);
    else
        timersub(&right_operand, &left_operand, &res);
}
于 2013-07-05T19:55:01.447 に答える