良い一日、
Webcam クラスには 1 秒あたり約 30 フレームがあり、これらのフレームはすべてベクトル (キューなど) に保存されます。次に、3 つの非同期スレッドがキューを読み取り、ジョブを実行しようとします (これらの画像を保存するため)。キューがオーバーフローするのはなぜですか? 問題は、これらのスレッドが Web カメラよりも遅いことです。
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);
問題は、これらのスレッドがこれらすべての画像を保存できないということです。なんで?スレッドを改善するにはどうすればよいですか?
Delphi バージョン: Delphi XE2
ウェブカメラのフレーム サイズ: 1280x760 または 960x600 ソース コード全体: http://pastebin.com/8SekN4TE