Ваш код имеет больше проблем, некоторые из них:
1) std::queue<AVpacket> Packet_buf;
Я думаю, это будет:
std::queue<AVPacket> Packet_buf;
заметка AVpacket
и AVPacket
- это совсем другое. (Да, я думаю, это просто опечатка).
2) while(key==0) {}
Это не хороший способ ждать изменения переменной. Особенно, если переменная (ключ) не volatile
. Это может работать и, вероятно, работает. Но я предлагаю вместо этого использовать переменные pthread signal
и cond
. Также проверьте следующую проблему (3), которая тесно связана.
3) *packet = Packet_buf.front();
Вызов std::queue.front()
перед проверкой, является ли контейнер empty()
или нет, НЕ является хорошей идеей. Если контейнер (очередь) пуст, чем метод front()
, это приведет к неопределенному поведению.
Надеюсь, это поможет.