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

View File

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