我最近正在制作一个节目。程序从视频中提取所有帧,然后全部处理它们......但是,在处理部分,它太慢了,所以我想要并行运行这些处理函数......
但是,由于我是Delphi的新手并且在多线程方面没有任何经验,我希望有人知道如何去做。
以下是我目前正在使用的功能:
sl.loadfromfile(log);
for i := 0 to (SL.Count div 2) - 1 do
begin
WriteLn('Processing extracted frames ' + IntToStr(i + 1) +
' of ' + IntToStr(SL2.Count div 2));
if FileExists(TempDir + IntToHex(i, 8) + '.jpg') then
ExecAndWait(SrcDir + 'packjpg.exe', AnsiRightStr(Str[2], 2) + ' ' +
'"' + TempDir + IntToHex(i, 8) + '.jpg' + '" "' + TempDir +
IntToHex(i, 8) + '.pjg' + '" , TempDir, true, true);
end;
答案 0 :(得分:1)
我的建议是什么
1.使用createProcess执行packjpg.exe,这将立即执行,你不会等待它完成。
2. createProcess返回一个TProcessInformation,您需要将其存储在列表中
3.对要处理的每个文件执行此操作
4.现在您正在同时处理文件和TProcessInformation列表
5.使用以下内容循环遍历您保留的TProcessInformation列表,直到完成所有过程:WaitForSingleObject(aProcessInformationRecord.hProcess, INFINITE);
您可以调整当前流程的最大数量等内容......