forked from mia/Aegisub
Fill in time_log() with code from http://www.suacommunity.com/dictionary/gettimeofday-entry.php <-thanks!
Originally committed to SVN as r4409.
This commit is contained in:
parent
b40d709924
commit
61ee7ce92d
1 changed files with 44 additions and 1 deletions
|
@ -24,9 +24,14 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
//#include <string.h>
|
||||||
|
#include "libaegisub/types.h"
|
||||||
#include "libaegisub/util.h"
|
#include "libaegisub/util.h"
|
||||||
#include "libaegisub/util_win.h"
|
#include "libaegisub/util_win.h"
|
||||||
|
|
||||||
|
@ -70,6 +75,44 @@ std::string ErrorString(DWORD error) {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @brief Get seconds and microseconds.
|
||||||
|
/// @param tv[out] timeval struct
|
||||||
|
/// This code is from http://www.suacommunity.com/dictionary/gettimeofday-entry.php
|
||||||
|
void time_log(timeval &tv) {
|
||||||
|
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
|
||||||
|
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
|
||||||
|
#else
|
||||||
|
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define a structure to receive the current Windows filetime
|
||||||
|
FILETIME ft;
|
||||||
|
|
||||||
|
// Initialize the present time to 0 and the timezone to UTC
|
||||||
|
unsigned __int64 tmpres = 0;
|
||||||
|
static int tzflag = 0;
|
||||||
|
|
||||||
|
GetSystemTimeAsFileTime(&ft);
|
||||||
|
|
||||||
|
// The GetSystemTimeAsFileTime returns the number of 100 nanosecond
|
||||||
|
// intervals since Jan 1, 1601 in a structure. Copy the high bits to
|
||||||
|
// the 64 bit tmpres, shift it left by 32 then or in the low 32 bits.
|
||||||
|
tmpres |= ft.dwHighDateTime;
|
||||||
|
tmpres <<= 32;
|
||||||
|
tmpres |= ft.dwLowDateTime;
|
||||||
|
|
||||||
|
// Convert to microseconds by dividing by 10
|
||||||
|
tmpres /= 10;
|
||||||
|
|
||||||
|
// The Unix epoch starts on Jan 1 1970. Need to subtract the difference
|
||||||
|
// in seconds from Jan 1 1601.
|
||||||
|
tmpres -= DELTA_EPOCH_IN_MICROSECS;
|
||||||
|
|
||||||
|
// Finally change microseconds to seconds and place in the seconds value.
|
||||||
|
// The modulus picks up the microseconds.
|
||||||
|
tv.tv_sec = (long)(tmpres / 1000000UL);
|
||||||
|
tv.tv_usec = (long)(tmpres % 1000000UL);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace io
|
} // namespace io
|
||||||
} // namespace agi
|
} // namespace agi
|
||||||
|
|
Loading…
Reference in a new issue