我有2个线程来解码RTSP流视频,我的代码如下:
namespace Library.Models.Bible
{
public class BibleModel : IPopulatable<BibleModel, DataTable>, IPopulatable<BibleModel, DataRow>
{
public Int32? ID { get; set; }
[MinLength(4, ErrorMessage = "Bible name must be between 4-100 characters")]
[MaxLength(100, ErrorMessage = "Bible name must be between 4-100 characters")]
public String Name { get; set; }
[MinLength(3, ErrorMessage = "Bible abbreviation must be between 3-9 characters")]
[MaxLength(9, ErrorMessage = "Bible abbreviation must be between 3-9 characters")]
[ValidateBibleAbbreviationExists]
public String Abbreviation { get; set; }
[MaxLength(250, ErrorMessage = "Publisher may not exceed 250 characters")]
public String Publisher { get; set; }
[MaxLength(3000, ErrorMessage = "Copyright may not exceed 3000 characters")]
public String Copyright { get; set; }
[MaxLength(3000, ErrorMessage = "Notes may not exceed 3000 characters")]
public String Notes { get; set; }
[EnumDataType(typeof(Enums.eTxtDir), ErrorMessage = "Text direction does not exist. Allowed values: LTR, RTL")]
public String TextDirection { get; set; }
[JsonIgnore]
public Int16 Active { get; set; } = 1;
public BibleModel Populate(DataTable dT)
{
if (dT != null && dT.Rows.Count > 0)
return Populate(dT.Rows[0]);
return null;
}
public BibleModel Populate(DataRow ro)
{
if(ro != null)
{
this.ID = Convert.ToInt32(ro["Bible_ID"]);
this.Name = ro["Name"].ToString();
this.Abbreviation = ro["Abbr"].ToString();
this.Publisher = ro["Publisher"].ToString();
this.Copyright = ro["Copyright"].ToString();
this.Notes = ro["Notes"].ToString();
this.TextDirection = ro["TxtDir"].ToString();
return this;
}
return null;
}
}
我的程序在以下行崩溃:* packet = Packet_buf.front();
您能帮我发现问题吗,谢谢!
答案 0 :(得分:0)
您的代码中有一个以上的问题,其中一些:
1) std::queue<AVpacket> Packet_buf;
我认为应该是:
std::queue<AVPacket> Packet_buf;
注意AVpacket
和AVPacket
是完全不同的东西。 (是的,我猜这只是一个错字)。
2) while(key==0) {}
这不是等待变量更改的好方法。特别是如果变量(key)不是volatile
。它可能会工作,也许正在工作。但是我建议您在这里使用 pthread signal
和cond
ition变量。还要检查下一个密切相关的问题(3)。
3) *packet = Packet_buf.front();
在检查容器是否为std::queue.front()
之前对empty()
进行校准不是一个好主意。如果容器(队列)比front()
方法为空,则此处将导致未定义的行为。
希望有帮助。