deskflow/src/lib/arch/win32/ArchSleepWindows.cpp

39 lines
1 KiB
C++
Raw Normal View History

2012-06-10 16:50:54 +00:00
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
2012-06-10 16:50:54 +00:00
*/
#include "arch/win32/ArchSleepWindows.h"
#include "arch/Arch.h"
#include "arch/win32/ArchMultithreadWindows.h"
2012-06-10 16:50:54 +00:00
//
2014-11-11 13:51:47 +00:00
// ArchSleepWindows
2012-06-10 16:50:54 +00:00
//
void ArchSleepWindows::sleep(double timeout)
{
ARCH->testCancelThread();
if (timeout < 0.0) {
return;
}
2012-06-10 16:50:54 +00:00
// get the cancel event from the current thread. this only
// works if we're using the windows multithread object but
// this is windows so that's pretty certain; we'll get a
// link error if we're not, though.
ArchMultithreadWindows *mt = ArchMultithreadWindows::getInstance();
if (mt != nullptr) {
HANDLE cancelEvent = mt->getCancelEventForCurrentThread();
WaitForSingleObject(cancelEvent, (DWORD)(1000.0 * timeout));
if (timeout == 0.0) {
Sleep(0);
}
} else {
Sleep((DWORD)(1000.0 * timeout));
}
ARCH->testCancelThread();
2012-06-10 16:50:54 +00:00
}