| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | //// detail/std_thread.hpp// ~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#ifndef BOOST_ASIO_DETAIL_STD_THREAD_HPP#define BOOST_ASIO_DETAIL_STD_THREAD_HPP#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)#include <boost/asio/detail/config.hpp>#if defined(BOOST_ASIO_HAS_STD_THREAD)#include <thread>#include <boost/asio/detail/noncopyable.hpp>#include <boost/asio/detail/push_options.hpp>namespace boost {namespace asio {namespace detail {class std_thread  : private noncopyable{public:  // Constructor.  template <typename Function>  std_thread(Function f, unsigned int = 0)    : thread_(f)  {  }  // Destructor.  ~std_thread()  {    join();  }  // Wait for the thread to exit.  void join()  {    if (thread_.joinable())      thread_.join();  }  // Get number of CPUs.  static std::size_t hardware_concurrency()  {    return std::thread::hardware_concurrency();  }private:  std::thread thread_;};} // namespace detail} // namespace asio} // namespace boost#include <boost/asio/detail/pop_options.hpp>#endif // defined(BOOST_ASIO_HAS_STD_THREAD)#endif // BOOST_ASIO_DETAIL_STD_THREAD_HPP
 |