截止日期计时器到期,现在怎么办?

Posted

技术标签:

【中文标题】截止日期计时器到期,现在怎么办?【英文标题】:deadline timer expires, now what? 【发布时间】:2012-05-01 17:30:49 【问题描述】:

我正在看http://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/example/timeouts/async_tcp_client.cpp中的asio示例

以下是我真正难以理解的内容:

    为什么handle_read 再次回调start_read? 计时器到期后会发生什么?我没有看到提供给计时器的回调例程。

void start_read() // 设置读取操作的截止日期。 最后期限_.expires_from_now(boost::posix_time::seconds(30));

// Start an asynchronous operation to read a newline-delimited message.
boost::asio::async_read_until(socket_, input_buffer_, '\n',
    boost::bind(&client::handle_read, this, _1));   

void handle_read(const boost::system::error_code& ec) 如果(停止_) 返回;

if (!ec)

  // Extract the newline-delimited message from the buffer.
  std::string line;
  std::istream is(&input_buffer_);
  std::getline(is, line);

  // Empty messages are heartbeats and so ignored.
  if (!line.empty())
  
    std::cout << "Received: " << line << "\n";
  

  start_read();

else

  std::cout << "Error on receive: " << ec.message() << "\n";

  stop();
   

【问题讨论】:

【参考方案1】:

为什么handle_read又回调start_read?

如果没有,客户端只会读取一次套接字,然后再也不读取。因此,在成功读取时,客户端想要再次尝试读取。这样可以永久读取套接字。

计时器到期时会发生什么?我没有看到提供给计时器的回调例程。

代码在源文件的顶部:

deadline_.async_wait(boost::bind(&client::check_deadline, this));

如果截止日期已过,check_deadline() 函数将关闭套接字。

【讨论】:

以上是关于截止日期计时器到期,现在怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里看webStorm还有多久到期

基于日期/时间字段的分区的分区到期倒计时

来自访问表的通知

JavaScript 倒计时(截止某日期的倒计时和截止每晚12点的倒计时以及固定时间倒计时)

如何在EXCEL表格中使用YIELD函数

NodeJs,处理用户投票的到期日期