В C ++, с доступным API Linux, есть ли способ вызвать событие после того, как прошло время t? - PullRequest
0 голосов
/ 25 декабря 2010

До сих пор я использовал в этом проекте библиотеки linux api и boost, поэтому в идеале я хотел бы придерживаться их.

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

Проблема в том, как узнать, когда прекратить добавление в переменную?Я хотел бы, чтобы какой-то тип события прерывания сказал бы мне: «Эй, это была секунда! Запишите отправленные байты и сбросьте переменную перед добавлением к ней снова!»У меня уже есть настройка epoll, поэтому, если бы я мог добавить некоторый тип файлового дескриптора, который я бы опрашивал с epoll, это было бы идеально!

Любые советы и предложения приветствуются.Заранее спасибо!

PS: Идея, которую я имею, состоит в том, чтобы иметь тему таймера.Он спит секунду, затем, когда он просыпается, пишет в очередь сообщений.Поскольку очереди сообщений могут опрашиваться через epoll, я получу событие и узнаю.Спящая нить просто продолжит петлю.Есть идеи получше?

Ответы [ 3 ]

3 голосов
/ 25 декабря 2010

Установите обработчик SIGALRM для завершения измерения, затем вызовите alarm(2) со временем, которое вы хотите измерить в секундах.

1 голос
/ 25 декабря 2010

Если вы используете boost, то, возможно, вам следует использовать boost :: asio для асинхронного ввода-вывода. Он оборачивает большинство необходимых вещей в независимый от платформы интерфейс. Он содержит таймер, а таймер имеет expires_at ().

0 голосов
/ 25 декабря 2010

Поскольку gettimeofday имеет точность до микросекунд, вы можете использовать ее для получения меток времени после каждой отправки и вычисления вашей мгновенной скорости.Также можно агрегировать количество байтов примерно за одну секунду (вам не нужно быть точным), разделить количество байтов на фактическое количество прошедших микросекунд и отправить его заинтересованным подписчикам.*

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