2017-01-30 1 views
0

Я попытался ниже, чтобы получить системное время с датой в miliseconds. Он отлично работает на платформе Linux, но не может работать на VXworks. Мне нужно аналогичное решение для vxworks.Как получить системное время с датой в миллисекундах в c/C++ на vxworks

#include <sys/time.h> /* It seems this is not available on vxworks */ 
#include <iostream> 
using namespace std; 
int main() 
{ 
    struct timeval tp; 
    gettimeofday(&tp, NULL); 
    unsigned long int ms = tp.tv_sec * 1000 + tp.tv_usec/1000; 
    cout<<ms 
    return 0; 
} 
+2

Что не работает? Как это не сработало? –

+0

Является ли 'tv_usec' * микросекундами * или миллисекундами? Я бы ожидал, что имя будет 'tv_msec' за миллисекунды. –

+0

Он дает ошибку компиляции для #include на vxworks. – Afgan

ответ

-1

Попробуйте tickget()

(1000 * tickGet()/sysClkRateGet(1000)) даст текущее время в мс. в соответствии с этим source

+1

Для обеспечения миллисекундного разрешения вам нужно вызвать 'sysClkRateSet (1000)', чтобы гарантировать, что системный тик обновляется каждые миллисекунды. В противном случае расчетное время может быть не очень точным ... –

+0

Yess, поэтому я изменил это благодаря: D –

+0

Это дает время с момента загрузки. И зависит от sysClkRate, может обернуться раньше, чем вы ожидаете – mjs

1

Возможно, вы можете ознакомиться с функциями clockLib.

Следующий код должен сделать трюк:

#include <vxworks.h> 
#include <timers.h> 


struct timespec t; 

if (clock_gettime(CLOCK_REALTIME, &t) == OK) 
{ 
    /* t.tv_usec and t.tv_sec are valid */ 
} 
+0

Спасибо Lukas. ваше решение работает нормально. – Afgan

Смежные вопросы