gpt4 book ai didi

C++代码编译但死掉问题(Having a line (queue), a buffer, and if not empty problem)

转载 作者:行者123 更新时间:2023-11-28 01:09:33 26 4
gpt4 key购买 nike

所以我要上课。 .h 文件包含一些变量,例如:

  struct AudioSample
{
const unsigned char * buffer;
int len;
};
//...
const unsigned char * VideoFrameBuffer;
int VideoFrameLen;


std::queue<AudioSample> AudioSamples;


bool sampleSendingFinished;
bool frameSendingFinished;
//...

还有带函数的.CPP文件

void VideoEncoder::UrlWriteData()
{
while(1){
if (AudioSamples.empty() && VideoFrameBuffer == NULL)
{
Sleep(1);
}
else if(!AudioSamples.empty())
{
struct AudioSample newAudioSample = AudioSamples.front();
url_write (url_context, (unsigned char *)newAudioSample.buffer, newAudioSample.len);
}
else if (AudioSamples.empty() && VideoFrameBuffer != NULL)
{
url_write (url_context, (unsigned char *)VideoFrameBuffer, VideoFrameLen);
}
}

}
void VideoEncoder::AddSampleToQueue(const unsigned char *buf, int size )
{

struct AudioSample newAudioSample;
newAudioSample.buffer = buf;
newAudioSample.len = size;
AudioSamples.push(newAudioSample);
}
void VideoEncoder::AddFrameToQueue(const unsigned char *buf, int size )
{
VideoFrameBuffer = buf;
VideoFrameLen = size;
}

偶尔一些函数会调用 AddFrameToQueue 和 AddSampleToQueue。 UrlWriteData 存在于单独的线程中。 我的应用程序编译。但我的问题是 - 当我运行它时它在线死机了:

        else if(!AudioSamples.empty())
{
struct AudioSample newAudioSample = AudioSamples.front();

它为什么会死,如何让它不死?

最佳答案

有一个线程安全的生产者-消费者队列使用即将成为标准的线程机制here .这将是对线程概念的一个很好的介绍,您必须了解这些概念才能使此设计有效。

生产者是添加到队列的函数,消费者是读取和(通常)处理队列条目的函数 - UrlWriteData,此处。

关于C++代码编译但死掉问题(Having a line (queue), a buffer, and if not empty problem),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132983/

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