среда, 13 апреля 2011 г.

Пример работы с таймером (реализация таймаута)

Сегодня в проекты "echo_server" и "qt_echo_server" (т.к. у них общая кодовая база касаемо самого сервера) введена возможность указывать для сессий (на стороне сервера, конечно) таймаут чтения, по истечении которого сессия считается неактивной (по вине клиента - мол "упал он там что ли?").

При этом оставлена возможность не задавать величину подобного таймаута. В этом случае таймаут не будет использоваться вообще (это похоже на таймаут, равный +∞).

Отличительная возможность реализации таймаута - это использование custom memory allocation для обработчика, используемого совместно с deadline_timer-ом. Эта "фишка" потребовала особого дизайна (правда, не столь уж и "мудреного") и показала то, о чем не сказано ни в одном примере Boost.Asio. - см. комментарии - там есть ссылка на пост автора Asio, где очень подробно описано более простое (и понятное) решение. Кстати, это решение уже есть в офиц. документации Asio.

Код пока только в SVN-репозитории (trunk).
После проверки всеми компиляторами появится dev-release.

Updated 14.09.2011: см. улучшенный/исправленный вариант.

пятница, 1 апреля 2011 г.

Qt Echo Server released

Всем, кому интересно, как связать многопоточный код с functor-based callbacks (например, Boost.Asio) и Qt signal/slot, смотреть проект qt_echo_server.
Решение простое и не использует никаких "хаков" - все по официальной документации Qt.
И так, Boost.Asio (+ Boost.Bind + Boost.Thread) + Qt (4.x) = qt_echo_server