2
我的班級Reciever ...它收到一些字符串並將其緩存。如何確保在boost :: asio中停止之前,所有async_handler都已完成?
Reciever::Reciever(boost::shared_ptr<TSBuffer<std::string>> buffer, int port)
: port(port), buffer(buffer)
{
using namespace boost::asio;
acceptor_ = new ip::tcp::acceptor(iosev, ip::tcp::endpoint(ip::tcp::v4(), port));
}
Reciever::~Reciever()
{
delete acceptor_;
}
void Reciever::run()
{
using namespace boost::asio;
_start();
iosev.run();
}
void Reciever::stop()
{
Sender s("127.0.0.1", std::string(8, '$'), port);
}
void Reciever::_start()
{
using namespace boost::asio;
boost::shared_ptr<ip::tcp::socket> socket(new ip::tcp::socket(iosev));
acceptor_->async_accept(*socket, boost::bind(&Reciever::acceptHanlder, this, socket));
}
void Reciever::acceptHanlder(boost::shared_ptr<boost::asio::ip::tcp::socket> socket)
{
std::string delim(8, '$');
boost::system::error_code ec;
boost::asio::streambuf strmbuf;
boost::asio::read_until(*socket, strmbuf, delim, ec);
std::istream is(&strmbuf);
std::string re((std::istreambuf_iterator<char>(is)),std::istreambuf_iterator<char>());
re.replace(re.end() - delim.size(), re.end(), "");
if (re.size() && re != std::string(8, '$')){
buffer->push(re);
_start();
}
在main()函數中,我使用X(不確定)線程將X字符串發送給Reciever。當Reciever :: acceptHanlder被調用X次(這意味着X字符串被處理)時,我想停止接收者(調用Reciever :: stop)。 但我不知道如何確定?
爲什麼你不能統計'acceptHandler'調用? –