From 7c89b38a2da041bb3bd4f5db59151ea430c5b1f0 Mon Sep 17 00:00:00 2001 From: Gert-Jan Timmer Date: Fri, 25 May 2018 15:33:53 +0200 Subject: [PATCH] Implementation for usleep Implement `usleep` for Windows OS. --- sqlite3_opt_usleep.go | 13 ------------- sqlite3_usleep_windows.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 13 deletions(-) delete mode 100644 sqlite3_opt_usleep.go create mode 100644 sqlite3_usleep_windows.go diff --git a/sqlite3_opt_usleep.go b/sqlite3_opt_usleep.go deleted file mode 100644 index d6ed38f..0000000 --- a/sqlite3_opt_usleep.go +++ /dev/null @@ -1,13 +0,0 @@ -// +build cgo -// +build windows - -// Copyright (C) 2018 G.J.R. Timmer . -// -// Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file. - -package sqlite3 - -/* - -/* diff --git a/sqlite3_usleep_windows.go b/sqlite3_usleep_windows.go new file mode 100644 index 0000000..fe4187d --- /dev/null +++ b/sqlite3_usleep_windows.go @@ -0,0 +1,39 @@ +// +build cgo + +// Copyright (C) 2018 G.J.R. Timmer . +// +// Use of this source code is governed by an MIT-style +// license that can be found in the LICENSE file. + +package sqlite3 + +// usleep is a function available on *nix based systems. +// This function is not present in Windows. +// Windows has a sleep function but this works with seconds +// and not with microseconds as usleep. +// +// This code should improve performance on windows because +// without the presence of usleep SQLite waits 1 second. +// +// Source: https://stackoverflow.com/questions/5801813/c-usleep-is-obsolete-workarounds-for-windows-mingw?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa + +/* +#include + +void usleep(__int64 usec) +{ + HANDLE timer; + LARGE_INTEGER ft; + + // Convert to 100 nanosecond interval, negative value indicates relative time + ft.QuadPart = -(10*usec); + + timer = CreateWaitableTimer(NULL, TRUE, NULL); + SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0); + WaitForSingleObject(timer, INFINITE); + CloseHandle(timer); +} +*/ +import "C" + +// EOF