Я создаю простую программу для захвата кадров с USB-устройств (USBCap) и отправки их по сети на мою вторую программу, сервер изображений (IMGSvr).
Обе программы всегда будут работать на одном компьютере или в одной локальной сети.
USBCap захватывает более 1 USB-устройства (с именем «канал»). Для этого я использую потоковую процедуру для каждого канала, которая получает новые кадры из оболочки DirectShow (videoInput).
Проблема начинается с сокета: он использует только одно TCP SOCK_STREAM соединение для отправки кадров в IMGSvr. send () блокирует последующие вызовы send () (другими потоками), когда используется frame.
Итак, если он блокирует все потоки, почему я использую многопоточную программу?
Какой лучший способ решить это? Может быть, адаптировать программу к потокам помещает новые кадры в очередь кадров, чтобы другой поток очищал эту очередь, отправляя кадры в очереди в IMGSvr.
Что вы думаете?
Нужно ли реализовывать LOCK в этой очереди при записи нового элемента?
Спасибо,
Даниэль Кох