我有两个线程来解码RTSP流视频,我的代码如下:
int key = 0;
std::queue<AVpacket> Packet_buf;
int thread1 (void)
{
AVPacket packet;
packet = read_packet();
Packet_buf.push(packet);
av_packet_unref(&packet);
key = 1;
}
int thread2 (void)
{
AVPacket *packet;
while(key==0) {} // wait to read the first packet
*packet = Packet_buf.front(); // program halt here
avcodec_send_packet(pCodecCtx,packet);
}
int main();
{
thread p1(thread1);
thread p2(thread2);
}我的程序在以下代码行崩溃:*packet = Packet_buf.front();
你能帮我找出问题所在吗,谢谢!
发布于 2018-07-05 15:36:39
你的代码有更多的问题,其中一些:
1) std::queue<AVpacket> Packet_buf;
我认为这应该是:
std::queue<AVPacket> Packet_buf;注意到AVpacket和AVPacket是完全不同的东西。(是的,我猜这只是一个打字错误)。
2) while(key==0) {}这不是等待变量更改的好方法。特别是当变量(键)不是volatile时。它可能会起作用,而且可能正在起作用。但我建议你在这里使用pthread signal和cond定义变量。还要检查下一期(3),这是密切相关的。
3)在检查容器是否为empty()之前先调用*packet = Packet_buf.front(); std::queue.front()并不是个好主意。如果容器(队列)为空,则此处的front()方法将导致未定义的行为。
希望这能有所帮助。
https://stackoverflow.com/questions/51165217
复制相似问题