2
0
mirror of https://github.com/boostorg/thread.git synced 2026-02-03 09:42:16 +00:00

Compare commits

...

6 Commits

15 changed files with 101 additions and 157 deletions

View File

@@ -405,7 +405,7 @@
#define BOOST_THREAD_FUTURE_USES_OPTIONAL
#endif
#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
#if BOOST_WORKAROUND(BOOST_BORLANDC, < 0x600)
# pragma warn -8008 // Condition always true/false
# pragma warn -8080 // Identifier declared but never used
# pragma warn -8057 // Parameter never used

View File

@@ -601,6 +601,9 @@ namespace boost
class BOOST_SYMBOL_VISIBLE thread::id
{
private:
#if !defined(BOOST_EMBTC)
friend inline
std::size_t
hash_value(const thread::id &v)
@@ -612,6 +615,14 @@ namespace boost
#endif
}
#else
friend
std::size_t
hash_value(const thread::id &v);
#endif
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
#if defined(BOOST_THREAD_PLATFORM_WIN32)
typedef unsigned int data;
@@ -704,6 +715,21 @@ namespace boost
#endif
#endif
};
#if defined(BOOST_EMBTC)
inline
std::size_t
hash_value(const thread::id &v)
{
#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
return hash_value(v.thread_data);
#else
return hash_value(v.thread_data.get());
#endif
}
#endif
#ifdef BOOST_THREAD_PLATFORM_PTHREAD
inline thread::id thread::get_id() const BOOST_NOEXCEPT

View File

@@ -145,6 +145,8 @@ namespace boost
{}
virtual ~thread_data_base();
#if !defined(BOOST_EMBTC)
friend void intrusive_ptr_add_ref(thread_data_base * p)
{
BOOST_INTERLOCKED_INCREMENT(&p->count);
@@ -158,6 +160,13 @@ namespace boost
}
}
#else
friend void intrusive_ptr_add_ref(thread_data_base * p);
friend void intrusive_ptr_release(thread_data_base * p);
#endif
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
void interrupt()
{
@@ -180,6 +189,24 @@ namespace boost
}
//#endif
};
#if defined(BOOST_EMBTC)
inline void intrusive_ptr_add_ref(thread_data_base * p)
{
BOOST_INTERLOCKED_INCREMENT(&p->count);
}
inline void intrusive_ptr_release(thread_data_base * p)
{
if(!BOOST_INTERLOCKED_DECREMENT(&p->count))
{
detail::heap_delete(p);
}
}
#endif
BOOST_THREAD_DECL thread_data_base* get_current_thread_data();
typedef boost::intrusive_ptr<detail::thread_data_base> thread_data_ptr;

View File

@@ -13,8 +13,10 @@
#include <windows.h>
#if defined(__BORLANDC__)
#if defined(BOOST_BORLANDC)
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
#elif defined(BOOST_EMBTC)
extern "C" int _libmain(DWORD dwReason)
#elif defined(_WIN32_WCE)
extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
#else

View File

@@ -26,8 +26,6 @@
#pragma warning(disable: 4127) // conditional expression is constant
#endif
namespace boost
{
template <typename T>
struct wrap
{
@@ -37,9 +35,8 @@ struct wrap
};
template <typename T>
exception_ptr make_exception_ptr(T v) {
return copy_exception(wrap<T>(v));
}
boost::exception_ptr make_exception_ptr(T v) {
return boost::copy_exception(wrap<T>(v));
}
void func1(boost::promise<int> p)
@@ -51,7 +48,7 @@ void func1(boost::promise<int> p)
void func2(boost::promise<int> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
}
int j = 0;
@@ -66,7 +63,7 @@ void func3(boost::promise<int&> p)
void func4(boost::promise<int&> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
}
void func5(boost::promise<void> p)
@@ -78,7 +75,7 @@ void func5(boost::promise<void> p)
void func6(boost::promise<void> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(4));
p.set_exception(::make_exception_ptr(4));
}
@@ -110,7 +107,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func2, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
#endif
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
try
@@ -159,7 +156,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func4, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
#endif
try
{

View File

@@ -36,8 +36,6 @@
#pragma warning(disable: 4127) // conditional expression is constant
#endif
namespace boost
{
template <typename T>
struct wrap
{
@@ -47,9 +45,8 @@ struct wrap
};
template <typename T>
exception_ptr make_exception_ptr(T v) {
return copy_exception(wrap<T>(v));
}
boost::exception_ptr make_exception_ptr(T v) {
return boost::copy_exception(wrap<T>(v));
}
void func1(boost::promise<int> p)
@@ -61,7 +58,7 @@ void func1(boost::promise<int> p)
void func2(boost::promise<int> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
}
int j = 0;
@@ -76,7 +73,7 @@ void func3(boost::promise<int&> p)
void func4(boost::promise<int&> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
}
void func5(boost::promise<void> p)
@@ -88,7 +85,7 @@ void func5(boost::promise<void> p)
void func6(boost::promise<void> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(4));
p.set_exception(::make_exception_ptr(4));
}
@@ -120,7 +117,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func2, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
#endif
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
try
@@ -133,7 +130,7 @@ int main()
BOOST_TEST(false);
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
}
catch (boost::wrap<int> const& i)
catch (::wrap<int> const& i)
{
BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
BOOST_TEST(i.value == 3);
@@ -177,7 +174,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func4, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
#endif
try
{
@@ -185,7 +182,7 @@ int main()
BOOST_TEST(f.get() == 3);
BOOST_TEST(false);
}
catch (boost::wrap<double> const& i)
catch (::wrap<double> const& i)
{
BOOST_TEST(i.value == 3.5);
}
@@ -200,7 +197,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func4, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
#endif
try
{
@@ -238,7 +235,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func6, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(4));
p.set_exception(::make_exception_ptr(4));
#endif
try
{
@@ -246,7 +243,7 @@ int main()
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> const& i)
catch (::wrap<int> const& i)
{
BOOST_TEST(i.value == 4);
}

View File

@@ -48,22 +48,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)

View File

@@ -46,22 +46,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)

View File

@@ -49,22 +49,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)

View File

@@ -24,8 +24,6 @@
#include <boost/detail/lightweight_test.hpp>
#include <boost/static_assert.hpp>
namespace boost
{
template <typename T>
struct wrap
{
@@ -38,11 +36,10 @@ namespace boost
};
template <typename T>
exception_ptr make_exception_ptr(T v)
boost::exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
return boost::copy_exception(wrap<T> (v));
}
}
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
void func(boost::promise<int> p)
@@ -51,8 +48,8 @@ boost::promise<int> p;
void func()
#endif
{
//p.set_exception(boost::make_exception_ptr(3));
p.set_exception_at_thread_exit(boost::make_exception_ptr(3));
//p.set_exception(::make_exception_ptr(3));
p.set_exception_at_thread_exit(::make_exception_ptr(3));
}
int main()
@@ -72,7 +69,7 @@ int main()
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> i)
catch (::wrap<int> i)
{
BOOST_TEST(i.value == 3);
}
@@ -96,7 +93,7 @@ int main()
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> i)
catch (::wrap<int> i)
{
BOOST_TEST(i.value == 3);
}

View File

@@ -24,8 +24,6 @@
#include <boost/detail/lightweight_test.hpp>
#include <boost/static_assert.hpp>
namespace boost
{
template <typename T>
struct wrap
{
@@ -38,11 +36,10 @@ namespace boost
};
template <typename T>
exception_ptr make_exception_ptr(T v)
boost::exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
return boost::copy_exception(wrap<T> (v));
}
}
int main()
{
@@ -51,19 +48,19 @@ int main()
typedef int T;
boost::promise<T> p;
boost::future<T> f = p.get_future();
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
try
{
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> i)
catch (::wrap<int> i)
{
BOOST_TEST(i.value == 3);
}
try
{
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
BOOST_TEST(false);
}
catch (const boost::future_error& e)
@@ -79,7 +76,7 @@ int main()
typedef int T;
boost::promise<T> p;
boost::future<T> f = p.get_future();
p.set_exception_deferred(boost::make_exception_ptr(3));
p.set_exception_deferred(::make_exception_ptr(3));
BOOST_TEST(!f.is_ready());
p.notify_deferred();
try
@@ -87,13 +84,13 @@ int main()
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> i)
catch (::wrap<int> i)
{
BOOST_TEST(i.value == 3);
}
try
{
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
BOOST_TEST(false);
}
catch (const boost::future_error& e)

View File

@@ -28,8 +28,6 @@
#if defined BOOST_THREAD_USES_CHRONO
namespace boost
{
template <typename T>
struct wrap
{
@@ -39,9 +37,8 @@ struct wrap
};
template <typename T>
exception_ptr make_exception_ptr(T v) {
return copy_exception(wrap<T>(v));
}
boost::exception_ptr make_exception_ptr(T v) {
return boost::copy_exception(wrap<T>(v));
}
void func1(boost::promise<int> p)
@@ -53,7 +50,7 @@ void func1(boost::promise<int> p)
void func2(boost::promise<int> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
}
int j = 0;
@@ -68,7 +65,7 @@ void func3(boost::promise<int&> p)
void func4(boost::promise<int&> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
}
void func5(boost::promise<void> p)
@@ -80,7 +77,7 @@ void func5(boost::promise<void> p)
void func6(boost::promise<void> p)
{
boost::this_thread::sleep_for(boost::chrono::milliseconds(500));
p.set_exception(boost::make_exception_ptr(4));
p.set_exception(::make_exception_ptr(4));
}
@@ -106,7 +103,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func2, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3));
p.set_exception(::make_exception_ptr(3));
#endif
try
{
@@ -114,7 +111,7 @@ int main()
BOOST_TEST(f.get() == 3);
BOOST_TEST(false);
}
catch (boost::wrap<int> const& i)
catch (::wrap<int> const& i)
{
BOOST_TEST(i.value == 3);
}
@@ -146,7 +143,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func4, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(3.5));
p.set_exception(::make_exception_ptr(3.5));
#endif
try
{
@@ -154,7 +151,7 @@ int main()
BOOST_TEST(f.get() == 3);
BOOST_TEST(false);
}
catch (boost::wrap<double> const& i)
catch (::wrap<double> const& i)
{
BOOST_TEST(i.value == 3.5);
}
@@ -181,7 +178,7 @@ int main()
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
boost::thread(func6, boost::move(p)).detach();
#else
p.set_exception(boost::make_exception_ptr(4));
p.set_exception(::make_exception_ptr(4));
#endif
try
{
@@ -189,7 +186,7 @@ int main()
f.get();
BOOST_TEST(false);
}
catch (boost::wrap<int> const& i)
catch (::wrap<int> const& i)
{
BOOST_TEST(i.value == 4);
}

View File

@@ -48,22 +48,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)

View File

@@ -46,22 +46,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)

View File

@@ -49,22 +49,6 @@ namespace boost
os << underlying_cast<int>(st) << " ";
return os;
}
template <typename T>
struct wrap
{
wrap(T const& v) :
value(v)
{
}
T value;
};
template <typename T>
exception_ptr make_exception_ptr(T v)
{
return copy_exception(wrap<T> (v));
}
}
void func1(boost::promise<int> p)