Последовательная многопоточность
Я хочу создать многопотоковую процедуру для следующего кода, но не могу ее правильно построить. Я попытался использовать семафор для последовательного завершения кода, но он только выполнил myStream2.CopyFrom(myStream1, StrToInt64('$' + SL1[(i - 1)]));
часть, которая подпадает под другую часть. Проблема заключается в том, что если мы случайно восстановим эти потоки в выходной файловый поток (mystream2), файл будет поврежден.
Кто-нибудь может мне помочь.
for i := 1 to SL1.Count do
begin
if Length(SL1[i - 1]) > 12 then
begin
TempDir := SrcDir + 'temp_' +
IntToHex(Random(2147483647) + Random(2147483647), 8) + '\';
ForceDirectories(TempDir);
for k := 1 to 2 do
begin
tempfile := TempDir + IntToHex((i - 1), 8) + '.tmp' + IntToStr(k);
fs := TFileStream.Create(tempfile, fmCreate or fmShareExclusive);
fs.CopyFrom(myStream1, StrToInt64('$' + DecodeRefStr(SL1[(i - 1)])[k]));
fs.Free;
end;
ExecAndWait(SrcDir + 'process.exe', Method + ' ' + '"' + TempDir +
IntToHex((i - 1), 8) + '.tmp1' + '" "' + TempDir +
IntToHex((i - 1), 8) + '.tmp2' + '" "' + TempDir +
IntToHex((i - 1), 8) + '.tmp4' + '"', TempDir,
True, True);
tempfile := TempDir + IntToHex((i - 1), 8) + '.tmp4';
fs := TFileStream.Create(tempfile, fmOpenRead);
myStream2.CopyFrom(fs, 0);
fs.Free;
TDirectory.Delete(TempDir, True);
end
else
myStream2.CopyFrom(myStream1, StrToInt64('$' + SL1[(i - 1)]));
end;
myStream1.Free;
myStream2.Free;