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 <fstream>
|
||||
|
||||
#include <time.h>
|
||||
#include <windows.h>
|
||||
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
//#include <string.h>
|
||||
#include "libaegisub/types.h"
|
||||
#include "libaegisub/util.h"
|
||||
#include "libaegisub/util_win.h"
|
||||
|
||||
|
@ -70,6 +75,44 @@ std::string ErrorString(DWORD error) {
|
|||
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 agi
|
||||
|
|
Loading…
Reference in a new issue