системное время в миллисекундах с ++ - PullRequest
0 голосов
/ 17 мая 2011

У меня есть очередь со структурами.Эта структура включает точное время помещения себя в очередь

У меня есть что-то вроде этого, чтобы увидеть системное время:

time_t rawtime;
struct tm * timeinfo;

time ( &rawtime );
timeinfo = localtime ( &rawtime );

long callTime=timeinfo->tm_hour*3600+timeinfo->tm_min*60+timeinfo->tm_sec;
q.push( Call( callNum, callTime, callLength ));

Проблема в том, что когда я выталкиваю следующую структуру из очереди, я хочупосчитайте, сколько времени struct ожидает в очереди в миллисекундах.

Я надеюсь, что кто-то может получить то, что я хочу сказать ..: \

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Вы можете использовать gettimeofday и затем вычесть время, сохраненное в вашем элементе очереди. gettimeofday() может обеспечить разрешение по времени в миллисекундах. Вы можете проверить эту SO ссылку для получения дополнительной информации.

Это предполагает, что каждый элемент в стеке также хранит время, в которое он был помещен. Если элемент не имеет его, вы можете сохранить структуру с элементом и временем или иметь отдельный стек с только раз.

1 голос
/ 17 мая 2011

Вам нужно использовать функцию gettimeofday() вместо time().Первый поддерживает точность до миллисекунды, а второй - с точностью до ближайшей секунды.

0 голосов
/ 18 мая 2011

gettimeofday - ответ, но если вы хотите просто проверить, как долго ваш элемент находится в очереди, то clock_gettime () может быть более подходящим. Например, вы можете использовать CLOCK_MONOTONIC (предположим, мы не считаем секунды):

struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);
// do some action ....
struct timespec ts2;
clock_gettime(CLOCK_MONOTONIC,&ts2);
std::cout << "spend " << ts2.tv_nsec - ts.tv_nsec << " nanoseconds" << std::endl;

И, конечно же, clock_gettime не является частью C ++, он является частью POSIX.1-2008

...