| // |
| // thread.hpp |
| // ~~~~~~~~~~ |
| // |
| // Copyright (c) 2003-2014 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 ASIO_THREAD_HPP |
| #define ASIO_THREAD_HPP |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1200) |
| # pragma once |
| #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) |
| |
| #include "asio/detail/config.hpp" |
| #include "asio/detail/noncopyable.hpp" |
| #include "asio/detail/thread.hpp" |
| |
| #include "asio/detail/push_options.hpp" |
| |
| namespace asio { |
| |
| /// A simple abstraction for starting threads. |
| /** |
| * The asio::thread class implements the smallest possible subset of the |
| * functionality of boost::thread. It is intended to be used only for starting |
| * a thread and waiting for it to exit. If more extensive threading |
| * capabilities are required, you are strongly advised to use something else. |
| * |
| * @par Thread Safety |
| * @e Distinct @e objects: Safe.@n |
| * @e Shared @e objects: Unsafe. |
| * |
| * @par Example |
| * A typical use of asio::thread would be to launch a thread to run an |
| * io_service's event processing loop: |
| * |
| * @par |
| * @code asio::io_service io_service; |
| * // ... |
| * asio::thread t(boost::bind(&asio::io_service::run, &io_service)); |
| * // ... |
| * t.join(); @endcode |
| */ |
| class thread |
| : private noncopyable |
| { |
| public: |
| /// Start a new thread that executes the supplied function. |
| /** |
| * This constructor creates a new thread that will execute the given function |
| * or function object. |
| * |
| * @param f The function or function object to be run in the thread. The |
| * function signature must be: @code void f(); @endcode |
| */ |
| template <typename Function> |
| explicit thread(Function f) |
| : impl_(f) |
| { |
| } |
| |
| /// Destructor. |
| ~thread() |
| { |
| } |
| |
| /// Wait for the thread to exit. |
| /** |
| * This function will block until the thread has exited. |
| * |
| * If this function is not called before the thread object is destroyed, the |
| * thread itself will continue to run until completion. You will, however, |
| * no longer have the ability to wait for it to exit. |
| */ |
| void join() |
| { |
| impl_.join(); |
| } |
| |
| private: |
| detail::thread impl_; |
| }; |
| |
| } // namespace asio |
| |
| #include "asio/detail/pop_options.hpp" |
| |
| #endif // ASIO_THREAD_HPP |