0

私の目標は、アイテムが取得 (購入) されてから販売された時点までの有効期限を決定することです。各アイテムには TTL 値が関連付けられています。

私は次のことをやっています:

time_t currentSellingTime;
long currentSystemTime = time(&currentSellingTime); // this gives me epoch millisec of now()

long TTL = <some_value>L;
long BuyingTime = <some_value> // this is also in epoch millsec


if(currentSystemTime >  TTL+BuyingTime))
{
//throw exception 
// item is expired
} 

私の質問は、C++ で 2 つのエポック ミリ秒を合計し、別のエポック ミリ秒と比較する方法です。

4

2 に答える 2

1

time()どのように機能するかについて、いくつかの誤解があるかもしれません:

  1. で指定されるエポック時間time()は、ミリ秒ではなく秒で表されます
  2. time は現在の時刻の値を返し、オプションで、唯一の引数として指定された変数に現在の時刻を設定できます。この意味は

    long currentSystemTime = time(¤tSellingTime);

と の両方currentSystemTimecurrentSellingTime現在の時刻に設定しますが、それはおそらくあなたが意図していることではありません...おそらくそうすべきです

long currentSystemTime = time(NULL);

また

time(&currentSellingTime);

しかし、使用している「二重形式」は非常に疑わしいです。完全を期すために、 time() の MS Help リファレンス

于 2013-06-25T10:42:06.850 に答える
0

前に指摘したように、別の関数を使用したい場合は、time()秒を返します。試す:

#include <time.h>


long current_time() {
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);

    return t.tv.sec * 1000l + t.tv_nsec / 1000000l;
}

その後、コードが機能するはずです。このアプローチは POSIX 互換でもあります。使用例:

const long TTL = 100;
long start_time = current_time();

while (!(current_time() > start_time + TTL))
{
    // do the stuff that can expire
}

while注:ループ内の条件は別の方法で構築できることは知ってい ますが、この方法は「期限切れになるまで」に似ています。

于 2013-06-25T10:53:37.943 に答える