From edb95b5914045f55e676a85f84446841e17302c0 Mon Sep 17 00:00:00 2001 From: Gert-Jan Timmer Date: Fri, 25 May 2018 14:15:46 +0200 Subject: [PATCH 1/3] Add: Initial usleep option [ci skip] --- sqlite3_opt_usleep.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sqlite3_opt_usleep.go diff --git a/sqlite3_opt_usleep.go b/sqlite3_opt_usleep.go new file mode 100644 index 0000000..d6ed38f --- /dev/null +++ b/sqlite3_opt_usleep.go @@ -0,0 +1,13 @@ +// +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 + +/* + +/* From 7c89b38a2da041bb3bd4f5db59151ea430c5b1f0 Mon Sep 17 00:00:00 2001 From: Gert-Jan Timmer Date: Fri, 25 May 2018 15:33:53 +0200 Subject: [PATCH 2/3] 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 From 89bdd9c3c9c50c35b7eda7b583892eb5da689880 Mon Sep 17 00:00:00 2001 From: Gert-Jan Timmer Date: Fri, 25 May 2018 15:49:35 +0200 Subject: [PATCH 3/3] Code format update [ci skip] --- sqlite3_usleep_windows.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlite3_usleep_windows.go b/sqlite3_usleep_windows.go index fe4187d..d439b53 100644 --- a/sqlite3_usleep_windows.go +++ b/sqlite3_usleep_windows.go @@ -25,7 +25,7 @@ void usleep(__int64 usec) HANDLE timer; LARGE_INTEGER ft; - // Convert to 100 nanosecond interval, negative value indicates relative time + // Convert to 100 nanosecond interval, negative value indicates relative time ft.QuadPart = -(10*usec); timer = CreateWaitableTimer(NULL, TRUE, NULL);