diff --git a/src/workers/Hashrate.cpp b/src/workers/Hashrate.cpp
index 83b4dc43..95623ff3 100644
--- a/src/workers/Hashrate.cpp
+++ b/src/workers/Hashrate.cpp
@@ -21,8 +21,35 @@
* along with this program. If not, see .
*/
+#ifndef _WIN32
+#include
+#else
+#define WIN32_LEAN_AND_MEAN
+#include
+#include // portable: uint64_t MSVC: __int64
+#include
-#include
+static int gettimeofday(struct timeval* tp, struct timezone* tzp)
+{
+ // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's
+ // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC)
+ // until 00:00:00 January 1, 1970
+ static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL);
+
+ SYSTEMTIME system_time;
+ FILETIME file_time;
+ uint64_t time;
+
+ GetSystemTime(&system_time);
+ SystemTimeToFileTime(&system_time, &file_time);
+ time = ((uint64_t)file_time.dwLowDateTime) ;
+ time += ((uint64_t)file_time.dwHighDateTime) << 32;
+
+ tp->tv_sec = (long)((time - EPOCH) / 10000000L);
+ tp->tv_usec = (long)(system_time.wMilliseconds * 1000);
+ return 0;
+}
+#endif
#include
#include
@@ -87,7 +114,9 @@ double Hashrate::calc(size_t ms) const
double Hashrate::calc(size_t threadId, size_t ms) const
{
- const uint64_t now = time(NULL);
+ struct timeval tp;
+ gettimeofday(&tp, NULL);
+ uint64_t now = tp.tv_sec * 1000 + tp.tv_usec / 1000;
uint64_t earliestHashCount = 0;
uint64_t earliestStamp = 0;
diff --git a/src/workers/Worker.cpp b/src/workers/Worker.cpp
index 23de1770..638704a9 100644
--- a/src/workers/Worker.cpp
+++ b/src/workers/Worker.cpp
@@ -27,7 +27,35 @@
#include "workers/Handle.h"
#include "workers/Worker.h"
-#include
+#ifndef _WIN32
+#include
+#else
+#define WIN32_LEAN_AND_MEAN
+#include
+#include // portable: uint64_t MSVC: __int64
+#include
+
+static int gettimeofday(struct timeval* tp, struct timezone* tzp)
+{
+ // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's
+ // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC)
+ // until 00:00:00 January 1, 1970
+ static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL);
+
+ SYSTEMTIME system_time;
+ FILETIME file_time;
+ uint64_t time;
+
+ GetSystemTime(&system_time);
+ SystemTimeToFileTime(&system_time, &file_time);
+ time = ((uint64_t)file_time.dwLowDateTime) ;
+ time += ((uint64_t)file_time.dwHighDateTime) << 32;
+
+ tp->tv_sec = (long)((time - EPOCH) / 10000000L);
+ tp->tv_usec = (long)(system_time.wMilliseconds * 1000);
+ return 0;
+}
+#endif
Worker::Worker(Handle* handle) :
m_id(handle->threadId()),
@@ -54,7 +82,10 @@ Worker::~Worker()
void Worker::storeStats()
{
- const uint64_t timestamp = time(NULL);
+ struct timeval tp;
+ gettimeofday(&tp, NULL);
+ uint64_t timestamp = tp.tv_sec * 1000 + tp.tv_usec / 1000;
+
m_hashCount = m_count;
m_timestamp = timestamp;
}