Ich arbeitete in letzter Zeit an einem Programm. Das Programm extrahiert alle Frames aus einem Video und verarbeitet sie dann alle ... Nut, in der Verarbeitung Teil, es ist viel zu langsam, so dachte ich, diese Verarbeitungsfunktionen parallel zu laufen ...Multithread String Funktion
Aber wie ich ' Ich bin neu in Delphi und habe keine Erfahrung mit Multithreading, ich hatte gehofft, dass jemand es würde. Hier
ist die Funktion, die ich zur Zeit mit:
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;
Der Code, den Sie geschrieben haben macht keinen Aufwand, irgendetwas in Threads zu tun, und da alle Arbeiten von einer externen Anwendung erledigt werden, ist es sehr unwahrscheinlich, dass Threads helfen. Höre einfach auf, auf die externe App zu warten und lasse mehrere Instanzen davon laufen. –
Nun, diese Instanzen zu verschiedenen Kernen zu übergeben kann die Geschwindigkeit viel zu schön verbessern ... Wie es dauert 10 Minuten, um 80K Dateien zu verarbeiten ... Aber wenn es auf 8 Kernen läuft ... Ich schätze, es kann es in 1-2 tun min – Zenith
Es wird nichts helfen, weil die Verzögerung in der Warte auf die externe App ist. Spawn stattdessen 8 Instanzen der externen App. Es gibt keinen Vorteil, wenn Sie irgendetwas in dem Code, den Sie gepostet haben, multi-threading-fähig machen, und wenn Sie anders denken, werden Sie sehr enttäuscht sein. –