再会,
一个网络摄像头类每秒大约有 30 帧,所有这些帧都将保存在一个向量中(就像一个队列)。然后 3 个异步线程将读取队列,并尝试完成它们的工作(以保存这些图像)。为什么队列满了?所以问题是这些线程比网络摄像头慢。
Procedure TSaveThread.Execute;
begin
while not terminated do
begin
elElement:=NIL;
EnterCriticalSection(CritSect);
if iElementsLength>=0 then
begin
elElement:=vElements[iElementsLength];
Dec(iElementsLength);
end;
LeaveCriticalSection(CritSect);
if elElement<>NIL then
begin
JpegImg.Assign(elElement.bmWebcam) ;
JpegImg.SaveToFile('Save\'+elElement.sTime+'.jpg') ;
elElement.Free;
end;
Sleep(20);
end;
end;
图像添加到队列中。
//------------------------------------------------------------------------------
Procedure TWebcam.OnSave(Sender:TObject; bmWebcam:TBitmap);
begin
EnterCriticalSection(CritSect);
inc(iElementsLength);
vElements[iElementsLength]:=TElement.Create(bmWebcam);
LeaveCriticalSection(CritSect);
end;
创建线程。
for i:=0 to 2 do
TSaveThread.Create(false);
问题是,这些线程无法保存所有这些图像。为什么?如何改进我的线程?
德尔福版本:德尔福 XE2
网络摄像头帧大小:1280x760 或 960x600 此处完整源代码:http ://pastebin.com/8SekN4TE