Re[15]: asio готовится к принятию в стандарт?
От: uzhas Ниоткуда  
Дата: 27.04.15 11:07
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Покажи как бы выглядел код использующий Asio с этими хэндлерами.


например, так:
class MyClient
{
protected:
  tcp::socket m_socket;
  task<void> m_ConnectTask;

public:
  bool Open()
  {
    ....
    m_ConnectTask = m_socket.async_connect( m_endpoint, boost::bind( &MyClient::HandleConnect, this, _1 ) );
  }

  void Close()
  {
    m_socket.close();
    m_ConnectTask.wait(); //blocks if there is incomplete async op, non blocking if there is no associated async op
  }

protected:
  void HandleConnect(  const boost::system::error_code& err )
  {
    //do something
  }

}

int main()
{
  ...
  MyClient *client = new MyClient();
  client->Open();
  client->Close();
  delete client;
  ...
}


EP>Часто нужен не явный контроль, а всего лишь prompt finalization, который прекрасно обеспечивается RAII.

я не вижу, как RAII поможет в примере выше. более того, socket.close — это не RAII, однако без него было бы еще сложнее =)

EP>Не надо раздавать shared_ptr кому попало.

дисциплину тяжело крыть автотестами, нужны более понятные средства, помогающие писать надежный софт

EP>Если в какой-то точке программы (в другом потоке?) нужно дождаться момента разрушения какого-то объекта, то необходимо делать блокирующее ожидание.


EP>Ты ссылаешься на то continuation, которое подразумевается в call-with-current-continuation. Есть же второе значение, которое в подразумевается в continuation-passing style.

в CPS тоже речь не о колбеке, а о целой ветке исполнения

EP>Продолжения тоже часто являются замыканиями.

согласен

EP>Я считаю что вполне уместно называть хэндлер асихнронной операции продолжением — это уже устоявшаяся практика.

а я считаю наоборот, это плохая практика, также как и писать "длинна", хоть это и распространенная практика
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.