Replacing banned APIs Sleep and InitializeCriticalSection for Windows store and phone.

This commit is contained in:
Steve Gates
2014-06-10 22:07:51 -07:00
parent 1968d17d2f
commit 71c9165119
2 changed files with 24 additions and 1 deletions

View File

@ -11,6 +11,7 @@
// boost/detail/lwm_win32_cs.hpp // boost/detail/lwm_win32_cs.hpp
// //
// Copyright (c) 2002, 2003 Peter Dimov // Copyright (c) 2002, 2003 Peter Dimov
// Copyright (c) Microsoft Corporation 2014
// //
// Distributed under the Boost Software License, Version 1.0. (See // Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at // accompanying file LICENSE_1_0.txt or copy at
@ -43,7 +44,11 @@ struct critical_section
#endif #endif
}; };
#if BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_VISTA
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
#else
extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
#endif
extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *); extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
@ -67,7 +72,11 @@ public:
lightweight_mutex() lightweight_mutex()
{ {
#if BOOST_USE_WINAPI_VERSION < BOOST_WINAPI_VERSION_VISTA
InitializeCriticalSection(&cs_); InitializeCriticalSection(&cs_);
#else
InitializeCriticalSectionEx(&cs_, 4000, 0);
#endif
} }
~lightweight_mutex() ~lightweight_mutex()

View File

@ -11,6 +11,7 @@
// yield_k.hpp // yield_k.hpp
// //
// Copyright (c) 2008 Peter Dimov // Copyright (c) 2008 Peter Dimov
// Copyright (c) Microsoft Corporation 2014
// //
// void yield( unsigned k ); // void yield( unsigned k );
// //
@ -24,6 +25,11 @@
// //
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/predef.h>
#if BOOST_PLAT_WINDOWS_RUNTIME
#include <thread>
#endif
// BOOST_SMT_PAUSE // BOOST_SMT_PAUSE
@ -53,7 +59,7 @@ namespace boost
namespace detail namespace detail
{ {
#if !defined( BOOST_USE_WINDOWS_H ) #if !defined( BOOST_USE_WINDOWS_H ) && BOOST_PLAT_WINDOWS_DESKTOP
extern "C" void __stdcall Sleep( unsigned long ms ); extern "C" void __stdcall Sleep( unsigned long ms );
#endif #endif
@ -68,6 +74,7 @@ inline void yield( unsigned k )
BOOST_SMT_PAUSE BOOST_SMT_PAUSE
} }
#endif #endif
#if BOOST_PLAT_WINDOWS_DESKTOP
else if( k < 32 ) else if( k < 32 )
{ {
Sleep( 0 ); Sleep( 0 );
@ -76,6 +83,13 @@ inline void yield( unsigned k )
{ {
Sleep( 1 ); Sleep( 1 );
} }
#else
else
{
// Sleep isn't supported on the Windows Runtime.
std::this_thread::yield();
}
#endif
} }
} // namespace detail } // namespace detail