forked from boostorg/thread
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added this_executor and default_executor examples.
- Loading branch information
Showing
2 changed files
with
147 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// Copyright (C) 2014 Vicente Botet | ||
// | ||
// 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) | ||
|
||
#include <boost/config.hpp> | ||
#if ! defined BOOST_NO_CXX11_DECLTYPE | ||
#define BOOST_RESULT_OF_USE_DECLTYPE | ||
#endif | ||
|
||
#define BOOST_THREAD_VERSION 4 | ||
#define BOOST_THREAD_PROVIDES_EXECUTORS | ||
//#define BOOST_THREAD_USES_LOG | ||
#define BOOST_THREAD_USES_LOG_THREAD_ID | ||
#define BOOST_THREAD_QUEUE_DEPRECATE_OLD | ||
|
||
#include <boost/thread/caller_context.hpp> | ||
#include <boost/thread/executors/basic_thread_pool.hpp> | ||
#include <boost/thread/executors/generic_executor_ref.hpp> | ||
#include <string> | ||
#include <iostream> | ||
|
||
#include <boost/thread/caller_context.hpp> | ||
|
||
|
||
boost::generic_executor_ref default_executor() | ||
{ | ||
static boost::basic_thread_pool tp(4); | ||
return boost::generic_executor_ref(tp); | ||
} | ||
|
||
void p2() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(200)); | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
} | ||
|
||
|
||
void p1() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(200)); | ||
default_executor().submit(&p2); | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(400)); | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
} | ||
|
||
int main() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
|
||
default_executor().submit(&p1); | ||
|
||
boost::this_thread::sleep_for(boost::chrono::seconds(5)); | ||
|
||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
|
||
return 1; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
// Copyright (C) 2014 Vicente Botet | ||
// | ||
// 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) | ||
|
||
#include <boost/config.hpp> | ||
#if ! defined BOOST_NO_CXX11_DECLTYPE | ||
#define BOOST_RESULT_OF_USE_DECLTYPE | ||
#endif | ||
|
||
#define BOOST_THREAD_VERSION 4 | ||
#define BOOST_THREAD_PROVIDES_EXECUTORS | ||
#define BOOST_THREAD_USES_LOG_THREAD_ID | ||
|
||
#include <boost/thread/caller_context.hpp> | ||
#include <boost/thread/executors/basic_thread_pool.hpp> | ||
#include <boost/thread/executors/generic_executor_ref.hpp> | ||
#include <boost/smart_ptr/shared_ptr.hpp> | ||
#include <boost/smart_ptr/make_shared.hpp> | ||
#include <string> | ||
#include <iostream> | ||
|
||
#include <boost/thread/caller_context.hpp> | ||
|
||
struct current_executor_state_type { | ||
boost::shared_ptr<boost::generic_executor_ref> current_executor_ptr; | ||
|
||
template <class Executor> | ||
void set_current_executor(Executor& ex) | ||
{ | ||
current_executor_ptr = boost::make_shared<boost::generic_executor_ref>(ex); | ||
} | ||
boost::generic_executor_ref current_executor() | ||
{ | ||
if (current_executor_ptr) | ||
return *current_executor_ptr; | ||
else | ||
throw ""; | ||
} | ||
}; | ||
|
||
thread_local current_executor_state_type current_executor_state; | ||
|
||
boost::generic_executor_ref current_executor() | ||
{ | ||
return current_executor_state.current_executor(); | ||
} | ||
|
||
void p2() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(200)); | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
} | ||
|
||
|
||
void p1() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(200)); | ||
current_executor().submit(&p2); | ||
boost::this_thread::sleep_for(boost::chrono::milliseconds(400)); | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
} | ||
|
||
int main() | ||
{ | ||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
|
||
boost::basic_thread_pool tp(4, | ||
// at_thread_entry | ||
[](boost::basic_thread_pool& pool) | ||
{ | ||
current_executor_state.set_current_executor(pool); | ||
} | ||
); | ||
|
||
tp.submit(&p1); | ||
|
||
boost::this_thread::sleep_for(boost::chrono::seconds(5)); | ||
|
||
std::cout << BOOST_CONTEXTOF << std::endl; | ||
|
||
return 1; | ||
|
||
} |