Как вызвать метод / функцию 50 раз в секунду

0

Как вызывать метод/функцию 50 раз в секунду, а затем вычислять затраченное время, если затраченное время меньше одной секунды, тогда спящий (1 раз) секунд.

Ниже приведен псевдокод

while(1)
{
  start_time = //find current time
  int msg_count=0;
  send_msg();
  msg_count++;

  // Check time after sending 50 messages
  if(msg_count%50 == 0)
  {
   curr_time = //Find current time
   int timeSpent = curr_time - start_time ;
   int waitingTime;

   start_time = curr_time ;

   waitingTime = if(start_time < 1 sec) ? (1 sec - timeSpent) : 0;
   wait for waitingTime; 
  }
}

Я новичок в API-интерфейсах Timer. Может ли кто-нибудь помочь мне, какие API-интерфейсы таймера, я должен использовать для достижения этого. Мне нужен переносимый код.

Теги:
timer
time

1 ответ

2
Лучший ответ

Сначала прочитайте страницу времени (7).

Затем вы можете вызвать функцию timer_create (2) для настройки таймера. Чтобы запросить время, используйте clock_gettime (2)

Возможно, вам захочется подождать и мультиплексировать некоторые входы и выходы. опрос (2) полезен для этого. Чтобы спать в течение небольшого промежутка времени без использования процессора, рассмотрите нанослое (2)

Если вы используете таймер, выполняете сигналы, читайте сигнал (7) и будьте осторожны, потому что обработчики сигналов ограничены функциями безопасности, совместимыми с асинхронным сигналом (подумайте о наличии обработчика сигнала, который просто устанавливает некоторый глобальный volatile sig_atomic_t флаг). Вас также может заинтересовать конкретный Linux timerfd_create (2) (который вы можете poll или передать в цикл событий).

Возможно, вы захотите использовать некоторую существующую библиотеку циклов событий, такую как libevent или libev (или те из GTK/Glib, Qt и т.д.), Которые часто используют poll (или более интересные вещи). Конкретные события linux eventfd (2) и signalfd (2) могут быть очень полезными.

Продвинутое программирование на Linux также полезно читать.

Если send_msg выполняет сетевой ввод-вывод, вам, вероятно, придется перепроектировать вашу программу вокруг какого-либо цикла событий (возможно, вашего собственного, основанного на poll) - вам нужно будет мультиплексировать (т. poll) как по сетевым передачам, так и по сети. стиль продолжения - это полезная парадигма.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню