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

Thread: Added user_scheduler (loop_executor).

[SVN r86570]
This commit is contained in:
Vicente J. Botet Escriba
2013-11-06 06:37:46 +00:00
parent 3ad582222c
commit 3723cedcab
8 changed files with 312 additions and 202 deletions

View File

@@ -9,6 +9,7 @@
#include <boost/thread/detail/log.hpp>
#include <boost/thread/thread_pool.hpp>
#include <boost/thread/user_scheduler.hpp>
#include <boost/thread/executor.hpp>
#include <boost/assert.hpp>
#include <string>
@@ -25,109 +26,33 @@ void p2()
<< boost::this_thread::get_id() << " P2" << BOOST_THREAD_END_LOG;
}
void push(boost::csbl::deque<boost::thread_detail::work> &data_, BOOST_THREAD_RV_REF(boost::thread_detail::work) closure)
{
try
{
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
boost::thread_detail::work v;
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
//v = boost::move(closure);
//v = boost::forward<boost::thread_detail::work>(closure);
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
data_.push_back(boost::move(closure));
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
//data_.push_back(boost::forward<boost::thread_detail::work>(closure));
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
}
catch (std::exception& ex)
{
BOOST_THREAD_LOG
<< "ERRORRRRR " << ex.what() << "" << BOOST_THREAD_END_LOG;
}
catch (...)
{
BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
}
}
template <typename Closure>
void submit(boost::csbl::deque<boost::thread_detail::work> &data_, BOOST_THREAD_FWD_REF(Closure) closure)
{
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
//work w =boost::move(closure);
//work_queue.push(boost::move(w));
//push(data_, boost::thread_detail::work(boost::forward<Closure>(closure)));
boost::thread_detail::work v =boost::forward<Closure>(closure);
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
push(data_, boost::move(v));
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
void submit_some(boost::executor& tp) {
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
}
int main()
{
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
#if 0
{
try
{
boost::thread_detail::work f(&p1);
boost::csbl::deque<boost::thread_detail::work> data_;
data_.push_back(boost::move(f));
data_.push_back(boost::thread_detail::work(&p1));
submit(data_, &p1);
}
catch (std::exception& ex)
{
BOOST_THREAD_LOG
<< "ERRORRRRR " << ex.what() << "" << BOOST_THREAD_END_LOG;
}
catch (...)
{
BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
}
typedef boost::csbl::vector<boost::thread> thread_vector;
thread_vector threads;
}
#endif
#if 1
{
try
{
boost::executor_adaptor<boost::thread_pool> ea;
boost::executor &tp=ea;
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
tp.submit(&p1);
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
tp.submit(&p1);
tp.submit(&p2);
submit_some(ea);
boost::executor_adaptor<boost::user_scheduler> ea2;
submit_some(ea2);
ea2.underlying_executor().run_queued_closures();
}
catch (std::exception& ex)
{
@@ -142,7 +67,6 @@ int main()
return 2;
}
}
#endif
BOOST_THREAD_LOG
<< boost::this_thread::get_id() << "MAIN>" << BOOST_THREAD_END_LOG;
return 0;