- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
template <typename Handler>
void start_connect_op(socket_type descriptor,
per_descriptor_data&, Handler handler)
{
boost::asio::detail::mutex::scoped_lock lock(mutex_);
if (!shutdown_)
{
boost::shared_ptr<bool> completed(new bool(false));
connect_handler_wrapper<Handler> wrapped_handler(
descriptor, completed, *this, handler);
bool interrupt = write_op_queue_.enqueue_operation(
descriptor, wrapped_handler);
interrupt = except_op_queue_.enqueue_operation(
descriptor, wrapped_handler) || interrupt;
if (interrupt)
interrupter_.interrupt();
}
}
boost::shared_ptr<bool> completed(new bool(false));
http://permalink.gmane.org/gmane.comp.lib.boost.devel/202907
Обсуждался частный случай увеличения производительности в 10 раз при переходе vs2008->vs2010.
Что касается ограниченности времени жизни, то, видимо, предполагалось, что bool, положенный в completed, может быть использован не только в этом треде (скажем, по мере дописания кода). AFAIK, просто так передать значение из shared_ptr нельзя (см. конструктор wrapped_handler) - скорее всего, там передаётся именно shared_ptr.
С другой стороны, например, можно было бы забацать класс, совместимый с bool, и с перегруженным и оптимизированным оператором new, чтобы работало побыстрее.
Ну и, конечно, делать 1000 коннектов в секунду - тоже извращение :)