gpt4 book ai didi

multithreading - 引用队列中的前数据包时程序终止

转载 作者:行者123 更新时间:2023-12-04 23:25:07 24 4
gpt4 key购买 nike

我有 2 个线程来解码 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();

你能帮我找出问题吗,谢谢!

最佳答案

您的代码有更多的问题,其中一些:

1) std::queue<AVpacket> Packet_buf;
我认为这将是:
std::queue<AVPacket> Packet_buf;通知 AVpacketAVPacket是完全不同的事情。 (是的,我猜这只是一个错字)。

2) while(key==0) {}这不是等待变量更改的好方法。特别是如果变量(键)不是 volatile .它可能工作并且可能正在工作。但我建议你使用 pthread signalcond在这里替换变量。另请检查密切相关的下一个问题(3)。

3) *packet = Packet_buf.front();校准 std::queue.front()在检查容器是否为 empty() 之前或不是不是好主意。如果容器(队列)为空而不是 front()此处的方法将导致未定义的行为。

希望有帮助。

关于multithreading - 引用队列中的前数据包时程序终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com