class thread_state final
{
std::chrono::milliseconds pause_{ 750 };
bool must_stop_{ false };
public :
bool must_stop() const { return must_stop_; }
template<typename Reply>
{
if( pause_ > std::chrono::milliseconds(5) )
{
pause_ = std::chrono::milliseconds(
static_cast< decltype(pause_.count()) >(pause_.count() / 1.5) );
so_5::send_delayed< Reply >( to, pause_ );
}
else
{
so_5::send< stop >( to );
must_stop_ = true;
}
}
};
{
thread_state state;
from(recv_chain).stop_on( [&state]{
return state.must_stop(); } ),
std::cout << "Tick!" << std::endl;
state.reply_or_stop< tack >( write_chain );
},
std::cout << "Tack!" << std::endl;
state.reply_or_stop< tick >( write_chain );
} );
}
{
return env_params;
}
int main()
{
std::thread second_thread;
second_thread = std::thread( thread_body, ch2, ch1 );
so_5::send< tick >( ch1 );
thread_body( ch1, ch2 );
return 0;
}