mirror of
https://github.com/SFML/SFML.git
synced 2024-11-24 20:31:05 +08:00
Simplify implementations of sf::sleep
This commit is contained in:
parent
58085efb29
commit
e3de52a0c4
@ -52,6 +52,6 @@ class Time;
|
|||||||
/// \param duration Time to sleep
|
/// \param duration Time to sleep
|
||||||
///
|
///
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
void SFML_SYSTEM_API sleep(Time duration);
|
SFML_SYSTEM_API void sleep(Time duration);
|
||||||
|
|
||||||
} // namespace sf
|
} // namespace sf
|
||||||
|
@ -14,7 +14,6 @@ set(SRC
|
|||||||
${INCROOT}/Export.hpp
|
${INCROOT}/Export.hpp
|
||||||
${INCROOT}/InputStream.hpp
|
${INCROOT}/InputStream.hpp
|
||||||
${INCROOT}/NativeActivity.hpp
|
${INCROOT}/NativeActivity.hpp
|
||||||
${SRCROOT}/Sleep.cpp
|
|
||||||
${INCROOT}/Sleep.hpp
|
${INCROOT}/Sleep.hpp
|
||||||
${SRCROOT}/String.cpp
|
${SRCROOT}/String.cpp
|
||||||
${INCROOT}/String.hpp
|
${INCROOT}/String.hpp
|
||||||
@ -42,14 +41,12 @@ source_group("" FILES ${SRC})
|
|||||||
# add platform specific sources
|
# add platform specific sources
|
||||||
if(SFML_OS_WINDOWS)
|
if(SFML_OS_WINDOWS)
|
||||||
set(PLATFORM_SRC
|
set(PLATFORM_SRC
|
||||||
${SRCROOT}/Win32/SleepImpl.cpp
|
${SRCROOT}/Win32/Sleep.cpp
|
||||||
${SRCROOT}/Win32/SleepImpl.hpp
|
|
||||||
)
|
)
|
||||||
source_group("windows" FILES ${PLATFORM_SRC})
|
source_group("windows" FILES ${PLATFORM_SRC})
|
||||||
else()
|
else()
|
||||||
set(PLATFORM_SRC
|
set(PLATFORM_SRC
|
||||||
${SRCROOT}/Unix/SleepImpl.cpp
|
${SRCROOT}/Unix/Sleep.cpp
|
||||||
${SRCROOT}/Unix/SleepImpl.hpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(SFML_OS_ANDROID)
|
if(SFML_OS_ANDROID)
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SFML - Simple and Fast Multimedia Library
|
|
||||||
// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
|
|
||||||
//
|
|
||||||
// This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
// In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
//
|
|
||||||
// Permission is granted to anyone to use this software for any purpose,
|
|
||||||
// including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
// subject to the following restrictions:
|
|
||||||
//
|
|
||||||
// 1. The origin of this software must not be misrepresented;
|
|
||||||
// you must not claim that you wrote the original software.
|
|
||||||
// If you use this software in a product, an acknowledgment
|
|
||||||
// in the product documentation would be appreciated but is not required.
|
|
||||||
//
|
|
||||||
// 2. Altered source versions must be plainly marked as such,
|
|
||||||
// and must not be misrepresented as being the original software.
|
|
||||||
//
|
|
||||||
// 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
// Headers
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
#include <SFML/System/Sleep.hpp>
|
|
||||||
#include <SFML/System/Time.hpp>
|
|
||||||
|
|
||||||
#if defined(SFML_SYSTEM_WINDOWS)
|
|
||||||
#include <SFML/System/Win32/SleepImpl.hpp>
|
|
||||||
#else
|
|
||||||
#include <SFML/System/Unix/SleepImpl.hpp>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
namespace sf
|
|
||||||
{
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void sleep(Time duration)
|
|
||||||
{
|
|
||||||
// Note that 'std::this_thread::sleep_for' is intentionally not used here
|
|
||||||
// as it results in inconsistent sleeping times under MinGW-w64.
|
|
||||||
|
|
||||||
if (duration >= Time::Zero)
|
|
||||||
priv::sleepImpl(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace sf
|
|
@ -25,19 +25,22 @@
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Headers
|
// Headers
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
#include <SFML/System/Sleep.hpp>
|
||||||
#include <SFML/System/Time.hpp>
|
#include <SFML/System/Time.hpp>
|
||||||
#include <SFML/System/Unix/SleepImpl.hpp>
|
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|
||||||
|
|
||||||
namespace sf::priv
|
namespace sf
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
void sleepImpl(Time time)
|
void sleep(Time duration)
|
||||||
{
|
{
|
||||||
const std::int64_t usecs = time.asMicroseconds();
|
if (duration == Time::Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const std::int64_t usecs = duration.asMicroseconds();
|
||||||
|
|
||||||
// Construct the time to wait
|
// Construct the time to wait
|
||||||
timespec ti{};
|
timespec ti{};
|
||||||
@ -54,4 +57,4 @@ void sleepImpl(Time time)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace sf::priv
|
} // namespace sf
|
@ -1,48 +0,0 @@
|
|||||||
////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SFML - Simple and Fast Multimedia Library
|
|
||||||
// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
|
|
||||||
//
|
|
||||||
// This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
// In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
//
|
|
||||||
// Permission is granted to anyone to use this software for any purpose,
|
|
||||||
// including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
// subject to the following restrictions:
|
|
||||||
//
|
|
||||||
// 1. The origin of this software must not be misrepresented;
|
|
||||||
// you must not claim that you wrote the original software.
|
|
||||||
// If you use this software in a product, an acknowledgment
|
|
||||||
// in the product documentation would be appreciated but is not required.
|
|
||||||
//
|
|
||||||
// 2. Altered source versions must be plainly marked as such,
|
|
||||||
// and must not be misrepresented as being the original software.
|
|
||||||
//
|
|
||||||
// 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
// Headers
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
#include <SFML/Config.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
namespace sf
|
|
||||||
{
|
|
||||||
class Time;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace sf::priv
|
|
||||||
{
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Unix implementation of sf::Sleep
|
|
||||||
///
|
|
||||||
/// \param time Time to sleep
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void sleepImpl(Time time);
|
|
||||||
|
|
||||||
} // namespace sf::priv
|
|
@ -25,17 +25,23 @@
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Headers
|
// Headers
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
#include <SFML/System/Sleep.hpp>
|
||||||
#include <SFML/System/Time.hpp>
|
#include <SFML/System/Time.hpp>
|
||||||
#include <SFML/System/Win32/SleepImpl.hpp>
|
|
||||||
#include <SFML/System/Win32/WindowsHeader.hpp>
|
#include <SFML/System/Win32/WindowsHeader.hpp>
|
||||||
|
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
|
||||||
namespace sf::priv
|
namespace sf
|
||||||
{
|
{
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
void sleepImpl(Time time)
|
void sleep(Time duration)
|
||||||
{
|
{
|
||||||
|
// Note that 'std::this_thread::sleep_for' is intentionally not used here
|
||||||
|
// as it results in inconsistent sleeping times under MinGW-w64.
|
||||||
|
|
||||||
|
if (duration == Time::Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
// Get the minimum supported timer resolution on this system
|
// Get the minimum supported timer resolution on this system
|
||||||
static const UINT periodMin = []
|
static const UINT periodMin = []
|
||||||
{
|
{
|
||||||
@ -48,10 +54,10 @@ void sleepImpl(Time time)
|
|||||||
timeBeginPeriod(periodMin);
|
timeBeginPeriod(periodMin);
|
||||||
|
|
||||||
// Wait...
|
// Wait...
|
||||||
::Sleep(static_cast<DWORD>(time.asMilliseconds()));
|
::Sleep(static_cast<DWORD>(duration.asMilliseconds()));
|
||||||
|
|
||||||
// Reset the timer resolution back to the system default
|
// Reset the timer resolution back to the system default
|
||||||
timeEndPeriod(periodMin);
|
timeEndPeriod(periodMin);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace sf::priv
|
} // namespace sf
|
@ -1,48 +0,0 @@
|
|||||||
////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SFML - Simple and Fast Multimedia Library
|
|
||||||
// Copyright (C) 2007-2024 Laurent Gomila (laurent@sfml-dev.org)
|
|
||||||
//
|
|
||||||
// This software is provided 'as-is', without any express or implied warranty.
|
|
||||||
// In no event will the authors be held liable for any damages arising from the use of this software.
|
|
||||||
//
|
|
||||||
// Permission is granted to anyone to use this software for any purpose,
|
|
||||||
// including commercial applications, and to alter it and redistribute it freely,
|
|
||||||
// subject to the following restrictions:
|
|
||||||
//
|
|
||||||
// 1. The origin of this software must not be misrepresented;
|
|
||||||
// you must not claim that you wrote the original software.
|
|
||||||
// If you use this software in a product, an acknowledgment
|
|
||||||
// in the product documentation would be appreciated but is not required.
|
|
||||||
//
|
|
||||||
// 2. Altered source versions must be plainly marked as such,
|
|
||||||
// and must not be misrepresented as being the original software.
|
|
||||||
//
|
|
||||||
// 3. This notice may not be removed or altered from any source distribution.
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
// Headers
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
#include <SFML/Config.hpp>
|
|
||||||
|
|
||||||
namespace sf
|
|
||||||
{
|
|
||||||
class Time;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace sf::priv
|
|
||||||
{
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
/// \brief Windows implementation of sf::Sleep
|
|
||||||
///
|
|
||||||
/// \param time Time to sleep
|
|
||||||
///
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
void sleepImpl(Time time);
|
|
||||||
|
|
||||||
} // namespace sf::priv
|
|
Loading…
Reference in New Issue
Block a user