Skip to content

Commit

Permalink
Thread: Added ostream_buffer.
Browse files Browse the repository at this point in the history
[SVN r85709]
  • Loading branch information
viboes committed Sep 16, 2013
1 parent 6319080 commit 650e374
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
61 changes: 61 additions & 0 deletions example/not_interleaved2.cpp
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;
}

35 changes: 35 additions & 0 deletions include/boost/thread/ostream_buffer.hpp
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
2 changes: 2 additions & 0 deletions test/Jamfile.v2
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,7 @@ rule thread-compile ( sources : reqs * : name )
[ thread-run2 ../example/producer_consumer.cpp : ex_producer_consumer ]
[ thread-run2 ../example/not_interleaved.cpp : ex_not_interleaved ]
[ thread-run2 ../example/lambda_future.cpp : ex_lambda_future ]
[ thread-run2 ../example/not_interleaved2.cpp : ex_not_interleaved2 ]

;

Expand Down Expand Up @@ -794,6 +795,7 @@ rule thread-compile ( sources : reqs * : name )
#[ thread-run test_8960.cpp ]
[ thread-run test_9079_a.cpp ]
[ thread-run test_9079_b.cpp ]
#[ thread-run clang_main.cpp ]

;

Expand Down

0 comments on commit 650e374

Please sign in to comment.