Как использовать розетки и таймеры, не блокируя друг друга? - PullRequest
1 голос
/ 15 января 2012

Мой проект - это сервер заданий, который хранит команды, полученные UDP, в очереди.Каждая команда имеет значение интервала для выполнения и значение тайм-аута для удаления.Эти действия управляются таймером, который должен работать независимо от кода сервера, например, 2 процесса.

Каков наилучший способ заставить сервер и таймер работать без блокировки друг друга?Я думаю о потоках или асинхронных вызовах, но я новичок в C ++ и не знаю, как применить эти идеи в своем коде.

Я использую Visual C ++ 2010 и ASIO из Boost 1.48.

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 января 2012

Вы можете запланировать асинхронное (неблокирующее) deadline_timer с Boost ASIO, как описано здесь: http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/tutorial/tuttimer2.html

Я предполагаю, что вы уже используете ASIO для связи по UDP (поскольку вы упомянули оба)- теперь это просто вопрос планирования таймеров, которые вам нужны в цикле событий, и все должно просто работать.

0 голосов
/ 15 января 2012

Вы должны быть в состоянии сделать это в одном потоке, используя «неблокирующий сокет» и рассчитанный вручную таймер (например, используя тики от запуска приложения, используемые в SDL), но это приведет к высокой загрузке ЦП.

Несколько потоков звучат намного лучше, но есть несколько вариантов, как это сделать.Например: http://support.microsoft.com/kb/815805 или pthreads под linux.

Google для «многопоточной визуализации C ++ 2010» должен рассказать вам гораздо больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...