Я пишу приложение Kinect WPF на C # для отправки команд жестов приложению aLinux C ++.
Моя проблема в том, что когда частота кадров приложения Linux падает ниже Kinect (25fps), он начинает регистрировать команды невероятно медленно,Ротация произойдет примерно через 5 секунд после отправки информации.Исходя из этого, я чувствую, как будто он очищает некоторые очереди пакетов очень медленно, так как они создаются для резервного копирования.
Частота кадров падает из-за повышенной сложности модели, отображаемой на стороне Linux.
ВВ каждом кадре рендеринга я проверяю, были ли получены какие-либо пакеты в течение примерно 1 мс через select () и recvfrom (), а затем анализирую его.Затем обновляется сценарий для всего мира.На стороне Kinect при скорости 25fps отправляются пакеты данных жестов по мере их распознавания.
Почему существует серьезная задержка, поскольку Linux FPS
Кроме того, каковы возможные решения для уменьшения этой задержки?
Я думаю, что задержка вызвананеспособность Linux обрабатывать все отправляемые пакеты, поэтому пакеты помещаются в очередь.Однако я не уверен, почему до сих пор не происходит никаких обновлений в течение нескольких секунд, несмотря на то, что он технически считывает 1 пакет на кадр.
Вот фрагмент кода.
(выполняется один раз для каждого кадра)
tv.tv_sec = 0;
tv.tv_usec = 1*1000
//BLOCKING 1ms
retval = select(sfd+1, &fds, NULL, NULL, &tv);
if (retval < 0) {
perror("select");
} else if (retval) {
int n = recvfrom(sfd, recvbuf, 1024, 0, (struct sockaddr *)&caddr, &len);
parse_command(recvbuf);
}
// После этого он начинает обновлять / преобразовывать мир / сцену
Спасибо!