std::basic_osyncstream<CharT,Traits,Allocator>:: basic_osyncstream
From cppreference.net
<
cpp
|
io
|
basic osyncstream
|
basic_osyncstream
(
streambuf_type
*
buf,
const
Allocator
&
a
)
;
|
(1) | |
|
explicit
basic_osyncstream
(
streambuf_type
*
buf
)
;
|
(2) | |
|
basic_osyncstream
(
std::
basic_ostream
<
CharT, Traits
>
&
os,
const
Allocator
&
a
)
;
|
(3) | |
|
explicit
basic_osyncstream
(
std::
basic_ostream
<
CharT, Traits
>
&
os
)
;
|
(4) | |
|
basic_osyncstream
(
std::
basic_osyncstream
&&
other
)
noexcept
;
|
(5) | |
Construye un nuevo flujo de salida sincronizado.
1-4)
Construye el miembro privado
std::
basic_syncbuf
utilizando el búfer y el asignador proporcionados, e inicializa la clase base con un puntero al miembro
std::
basic_streambuf
.
5)
Constructor de movimiento. Construye por movimiento la base
std::
basic_ostream
y el miembro std::basic_syncbuf desde los subobjetos correspondientes de
other
, luego llama a
set_rdbuf
con el puntero al
std::
basic_syncbuf
subyacente recién construido para completar la inicialización de la base. Después de este constructor de movimiento,
other.
get_wrapped
(
)
devuelve
nullptr
y la destrucción de
other
no produce salida.
Parámetros
| buf | - | puntero al std::basic_streambuf que será envuelto |
| os | - | referencia a un std::basic_ostream , cuyo rdbuf() será envuelto |
| a | - | el asignador que se pasará al constructor del miembro std::basic_syncbuf |
| other | - | otro osyncstream desde el cual mover |
Ejemplo
Ejecutar este código
#include <iostream> #include <string_view> #include <syncstream> #include <thread> void worker(const int id, std::ostream &os) { std::string_view block; switch (id) { default: [[fallthrough]]; case 0: block = "██"; break; case 1: block = "▓▓"; break; case 2: block = "▒▒"; break; case 3: block = "░░"; break; } for (int i = 1; i <= 50; ++i) os << block << std::flush; os << std::endl; } int main() { std::cout << "Synchronized output should not cause any interference:" << std::endl; { auto scout1 = std::osyncstream{std::cout}; auto scout2 = std::osyncstream{std::cout}; auto scout3 = std::osyncstream{std::cout}; auto scout4 = std::osyncstream{std::cout}; auto w1 = std::jthread{worker, 0, std::ref(scout1)}; auto w2 = std::jthread{worker, 1, std::ref(scout2)}; auto w3 = std::jthread{worker, 2, std::ref(scout3)}; auto w4 = std::jthread{worker, 3, std::ref(scout4)}; } std::cout << "\nLack of synchronization may cause some interference on output:" << std::endl; { auto w1 = std::jthread{worker, 0, std::ref(std::cout)}; auto w2 = std::jthread{worker, 1, std::ref(std::cout)}; auto w3 = std::jthread{worker, 2, std::ref(std::cout)}; auto w4 = std::jthread{worker, 3, std::ref(std::cout)}; } }
Salida posible:
Synchronized output should not cause any interference: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ████████████████████████████████████████████████████████████████████████████████████████████████████ Lack of synchronization may cause some interference on output: ████▓▓██▒▒▒▒▓▓██░░▒▒██░░▒▒░░░░▒▒░░▓▓▒▒██░░████████████▓▓██████▓▓▒▒▓▓██░░████▓▓▓▓██▒▒░░░░░░░░▓▓░░▓▓██▒▒▒▒▒▒▒▒▓▓██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒▒▒░░▒▒▒▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▒▒▒██░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████████▓▓▓▓▓▓▓▓▓▓▓▓░░▓▓▓▓ ▒▒▒▒██░░██████████████████████████░░░░░░░░░░░░░░██░░▒▒░░░░░░██████████████████ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒ ░░░░░░
Véase también
construye un objeto
basic_syncbuf
(función miembro pública de
std::basic_syncbuf<CharT,Traits,Allocator>
)
|