- 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();
}
}
Говногость 22.04.2010 21:16 # +1
boost::shared_ptr<bool> completed(new bool(false));
mock 23.04.2010 06:14 # 0
Гвозди Заржавелли 25.04.2010 10:53 # −1
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 коннектов в секунду - тоже извращение :)
C++0x 22.04.2010 23:54 # −2
mock 23.04.2010 06:16 # +2
_C++ 24.04.2010 13:02 # −2
Говногость 24.04.2010 14:57 # 0
ISith 28.04.2010 00:24 # −1
cfdev 28.04.2010 00:34 # −1
guest 28.04.2010 17:05 # 0