Они предлагают преобразовать SYSTEMTIME
в FILETIME
, то есть число тиков с эпохи.Затем вы можете добавить необходимое количество «тиков» (т.е. интервалы 100 нс), чтобы указать ваше время, и преобразовать обратно в SYSTEMTIME
.
. Структура ULARGE_INTEGER
представляет собой объединение сQuadPart
член, представляющий собой 64-битное число, которое можно напрямую добавить (на новейшем оборудовании).
SYSTEMTIME add( SYSTEMTIME s, double seconds ) {
FILETIME f;
SystemTimeToFileTime( &s, &f );
ULARGE_INTEGER u ;
memcpy( &u , &f , sizeof( u ) );
const double c_dSecondsPer100nsInterval = 100.*1.e-9;
const double c_dNumberOf100nsIntervals =
seconds / c_dSecondsPer100nsInterval;
// note: you may want to round the number of intervals.
u.QuadPart += c_dNumberOf100nsIntervals;
memcpy( &f, &u, sizeof( f ) );
FileTimeToSystemTime( &f, &s );
return s;
}