// Copyright (C) 2001-2003 // William E. Kempf // // 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_THREAD_WEK070601_HPP #define BOOST_THREAD_WEK070601_HPP #include #include #include #include #include #include #if defined(BOOST_HAS_PTHREADS) # include # include #elif defined(BOOST_HAS_MPTASKS) # include #endif namespace boost { struct xtime; // disable warnings about non dll import // see: http://www.boost.org/more/separate_compilation.html#dlls #ifdef BOOST_MSVC # pragma warning(push) # pragma warning(disable: 4251 4231 4660 4275) #endif class BOOST_THREAD_DECL thread : private noncopyable { public: thread(); explicit thread(const function0& threadfunc); ~thread(); bool operator==(const thread& other) const; bool operator!=(const thread& other) const; void join(); static void sleep(const xtime& xt); static void yield(); private: #if defined(BOOST_HAS_WINTHREADS) void* m_thread; unsigned int m_id; #elif defined(BOOST_HAS_PTHREADS) private: pthread_t m_thread; #elif defined(BOOST_HAS_MPTASKS) MPQueueID m_pJoinQueueID; MPTaskID m_pTaskID; #endif bool m_joinable; }; class BOOST_THREAD_DECL thread_group : private noncopyable { public: thread_group(); ~thread_group(); thread* create_thread(const function0& threadfunc); void add_thread(thread* thrd); void remove_thread(thread* thrd); void join_all(); int size(); private: std::list m_threads; mutex m_mutex; }; #ifdef BOOST_MSVC # pragma warning(pop) #endif } // namespace boost // Change Log: // 8 Feb 01 WEKEMPF Initial version. // 1 Jun 01 WEKEMPF Added boost::thread initial implementation. // 3 Jul 01 WEKEMPF Redesigned boost::thread to be noncopyable. #endif // BOOST_THREAD_WEK070601_HPP