Я не знаю, каков ваш jobm
объект, я предполагаю, что он создан вами, потому что это единственный результат Google для аналогичного объекта, поэтому исправьте меня, если я ошибаюсь.
Вы, кажется, открываете видеоустройство для чтения, видеоустройство постоянно генерирует видеоданные, и вместо чтения вы работаете на холостом ходу. Похоже, вы не отправляете device_fd
на вашу работу, поэтому он не может знать, есть ли активность на fd, и поэтому он спит, когда вы должны читать, что создает переполнение буфера.
Вам необходимо всегда читать данные из device_fd
, если они есть. Отправьте fd на задание и заставьте его использовать poll
или select
для поиска активности на нем.
Редактировать: Извините, я пропустил детали вашего вопроса. То, что я сказал, по-прежнему применимо, но не так прямо - вам нужно наблюдать как ваши входы и выходы, а не только ваши выходы, по той причине, о которой я говорил.
Если fifos не может обработать вывод, и в результате вы пропускаете чтение на вашем устройстве, вы получаете проблему, которую получаете. Вам нужно либо: 1) создать буфер, который содержит до нескольких сотен МБ данных на случай, если канал опаздывает на его запись, 2) отбросить пакеты. Приложения DVB должны обрабатывать это, если какая-то часть данных отсутствует. Вы также можете просто перехватить и проигнорировать исключение, хотя это приведет к незначительному повреждению и отсутствию данных в выходных данных.