Einzelnen Beitrag anzeigen

Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
108 Beiträge
 
Delphi 2006 Enterprise
 
#9

AW: FileCopy im Thread

  Alt 17. Mai 2017, 19:00
Vielen Dank für eure Hinweise.

Ich denke, auch xcopy, robocopy und Kollegen kochen nur mit Wasser

Ich habe jetzt etwas mehr Intelligenz in die Read/Write Threads verlagert und kann jetzt mit dem Code im Main-Thread leben.
Delphi-Quellcode:
      while ( rest > 0 ) and ( Len > 0 ) do begin
         if ( read1.xBuf1Ready = 1 ) and ( write1.xBuf1Ready = 0 ) and ( write2.xBuf1Ready = 0 ) then begin
            len := read1.xLen1Read;
            rest := rest - len;
            write1.xLen1Read := Len;
            write2.xLen1Read := Len;
            write1.xBuf1Ready := 1; // Start write 1 Buffer 1
            write2.xBuf1Ready := 1; // Start write 2 Buffer 1
            read1.xBuf1Ready := 2; // Buf1 wird geschrieben
            dbg( 'RUN rest ' + intToStr( ( Rest div 1024 div 1024 ) ) + 'MB Buffer ' + intToStr( ( Len div 1024 div 1024 ) ) + 'MB');
         end;
         if ( read1.xBuf2Ready = 1 ) and ( write1.xBuf2Ready = 0 ) and ( write2.xBuf2Ready = 0 ) then begin
            len := read1.xLen2Read;
            rest := rest - len;
            write1.xLen2Read := Len;
            write2.xLen2Read := Len;
            write1.xBuf2Ready := 1; // Start write 1 Buffer 2
            write2.xBuf2Ready := 1; // Start write 2 Buffer 2
            read1.xBuf2Ready := 2; // Buf2 wird geschrieben
            dbg( 'RUN rest ' + intToStr( ( Rest div 1024 div 1024 ) ) + 'MB Buffer ' + intToStr( ( Len div 1024 div 1024 ) ) + 'MB');
         end;
         if ( read1.xBuf1Ready = 2 ) and ( write1.xBuf1Ready = 0 ) and ( write2.xBuf1Ready = 0 ) then read1.xBuf1Ready := 0; // Freigabe Read Buffer 1
         if ( read1.xBuf2Ready = 2 ) and ( write1.xBuf2Ready = 0 ) and ( write2.xBuf2Ready = 0 ) then read1.xBuf2Ready := 0; // Freigabe Read Buffer 2
         sleep(1);
      end; // While end
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat