123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include <boost/asio/post.hpp>
- #include <boost/asio/thread_pool.hpp>
- #include <boost/asio/use_future.hpp>
- #include <iostream>
- using boost::asio::post;
- using boost::asio::thread_pool;
- using boost::asio::use_future;
- // Traditional active object pattern.
- // Member functions block until operation is finished.
- class bank_account
- {
- int balance_ = 0;
- mutable thread_pool pool_{1};
- public:
- void deposit(int amount)
- {
- post(pool_,
- use_future([=]
- {
- balance_ += amount;
- })).get();
- }
- void withdraw(int amount)
- {
- post(pool_,
- use_future([=]
- {
- if (balance_ >= amount)
- balance_ -= amount;
- })).get();
- }
- int balance() const
- {
- return post(pool_,
- use_future([=]
- {
- return balance_;
- })).get();
- }
- };
- int main()
- {
- bank_account acct;
- acct.deposit(20);
- acct.withdraw(10);
- std::cout << "balance = " << acct.balance() << "\n";
- }
|