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.
[SVN r85709]
- Loading branch information
Showing
3 changed files
with
98 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 @@ | ||
// (C) Copyright 2012 Howard Hinnant | ||
// (C) Copyright 2012 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) | ||
|
||
// adapted from the example given by Howard Hinnant in | ||
|
||
#define BOOST_THREAD_VERSION 4 | ||
|
||
#include <iostream> | ||
#include <boost/thread/scoped_thread.hpp> | ||
#include <boost/thread/ostream_buffer.hpp> | ||
|
||
void use_cerr() | ||
{ | ||
using namespace boost; | ||
chrono::steady_clock::time_point tf = chrono::steady_clock::now() + chrono::seconds(5); | ||
int i = 0; | ||
while (chrono::steady_clock::now() < tf) | ||
{ | ||
ostream_buffer<std::ostream> mcerr(std::cerr); | ||
mcerr.stream() << "logging data to cerr " << i++ << "\n"; | ||
this_thread::sleep_for(chrono::milliseconds(250)); | ||
} | ||
} | ||
|
||
void use_cout() | ||
{ | ||
using namespace boost; | ||
chrono::steady_clock::time_point tf = chrono::steady_clock::now() + chrono::seconds(5); | ||
int i = 0; | ||
while (chrono::steady_clock::now() < tf) | ||
{ | ||
ostream_buffer<std::ostream> mcout(std::cout); | ||
mcout.stream() << "logging data to cout " << i++ << "\n"; | ||
this_thread::sleep_for(chrono::milliseconds(500)); | ||
} | ||
} | ||
|
||
int main() | ||
{ | ||
using namespace boost; | ||
|
||
scoped_thread<> t1(&use_cerr); | ||
scoped_thread<> t2(&use_cout); | ||
this_thread::sleep_for(chrono::seconds(2)); | ||
std::string nm = "he, he\n"; | ||
{ | ||
ostream_buffer<std::ostream> mcout(std::cout); | ||
mcout.stream() << "Enter name: \n"; | ||
} | ||
t1.join(); | ||
t2.join(); | ||
{ | ||
ostream_buffer<std::ostream> mcout(std::cout); | ||
mcout.stream() << nm; | ||
} | ||
return 0; | ||
} | ||
|
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,35 @@ | ||
// (C) Copyright 2013 Vicente J. Botet Escriba | ||
// 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_OSTREAM_BUFFER_HPP | ||
#define BOOST_THREAD_OSTREAM_BUFFER_HPP | ||
|
||
#include <boost/thread/detail/config.hpp> | ||
#include <boost/thread/detail/delete.hpp> | ||
#include <sstream> | ||
|
||
#include <boost/config/abi_prefix.hpp> | ||
|
||
namespace boost | ||
{ | ||
|
||
template <typename OStream> | ||
class ostream_buffer | ||
{ | ||
public: | ||
typedef std::basic_ostringstream<typename OStream::char_type, typename OStream::traits_type> stream_type; | ||
ostream_buffer(OStream& os) : os_(os) {} | ||
~ostream_buffer() { os_ << o_str_.str(); } | ||
stream_type& stream() { return o_str_; } | ||
private: | ||
OStream& os_; | ||
stream_type o_str_; | ||
}; | ||
} | ||
|
||
#include <boost/config/abi_suffix.hpp> | ||
|
||
#endif // header |
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