AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DEC onProgress-Ereignis bei mehreren Threads

Ein Thema von Luckie · begonnen am 9. Aug 2003 · letzter Beitrag vom 11. Aug 2003
 
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: DEC onProgress-Ereignis bei mehreren Threads

  Alt 10. Aug 2003, 11:09
Hi Luckie,

sorry für die späte Antwort, aber es gibt auch mal einen Geburtstag zu feiern.

Also, es ist schon erschreckend wie du so schnell die Schwachstellen im DEC findest. OnProgress() ist ein globales Event das 1. nicht threadsafe ist und 2. global immer nur einen Verschlüsselungsprozess unterstützt.

D.h. mit OnProgress() wirst du das was du willst nie hinbekommen. Vergiss es also. Verzichte auf TCipherManager/THashManager, beides sind Komponenten die ich für die DAU's coden musste, es sind Drag&Design Hilfsmittel.


Nachfolgend zeige ich wie man jeden Stream mit Progress Funktionalität ausbauen kann. D.h. deine Progressbar sollte individuell zum Streaming sein, dann ist sie auch threadsafe. Desweiteren zeige ich wie man Verschlüsselt ohne TCipherManager, die Entschlüsselung bekommste damit selber hin.

Delphi-Quellcode:
type
  TStreamProgressAdapter = class(TStream)
  private
    FStream: TStream;
  protected
    procedure SetSize(NewSize: Longint); override;
  public
    constructor Create(AStream: TStream);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; override;

    procedure DoProgress(Writing: Boolean); virtual;
  end;

procedure TStreamProgressAdapter.SetSize(NewSize: Longint);
begin
  TStreamProgressAdapter(FStream).SetSize(NewSize);
end;

constructor TStreamProgressAdapter.Create(AStream: TStream);
begin
  inherited Create;
  FStream := AStream;
end;

destructor TStreamProgressAdapter.Destroy;
begin
  inherited Destroy;
  FStream.Free;
end;

function TStreamProgressAdapter.Read(var Buffer; Count: Longint): Longint;
begin
  Result := FStream.Read(Buffer, Count);
  DoProgress(False);
end;

function TStreamProgressAdapter.Write(const Buffer; Count: Longint): Longint;
begin
  Result := FStream.Write(Buffer, Count);
  DoProgress(False);
end;

function TStreamProgressAdapter.Seek(Offset: Longint; Origin: Word): Longint;
begin
  Result := FStream.Seek(Offset, Origin);
end;

procedure TStreamProgressAdapter.DoProgress(Writing: Boolean);
begin
  // hier deine Progress Funktionen einbauen
end;

procedure Encrypt(Stream: TStream; const Password: String; CipherClass: TCipherClass = nil); overload;
begin
  if CipherClass = nil then
    CipherClass := TCipher_Blowfish;
  with CipherClass.Create('', nil) do
  try
    Mode := cmCTS;
    InitKey(Password, nil);
    EncodeStream(Stream, Stream, -1);
  finally
    Free;
  end;
end;

procedure Encrypt(const FileName, Password: String; CipherClass: TCipherClass = nil); overload;
var
  Stream: TStream;
begin
  Stream := TStreamProgressAdapter.Create(TFileStream.Create(FileName, fmOpenReadWrite or fmShareExclusive));
  try
    Encrypt(Stream, Password, CipherClass);
  finally
    Stream.Free;
  end;
end;

procedure TestC;
begin
  Encrypt('d:\test.bin', 'Test');
  Encrypt('d:\test.bin', 'Test', TCipher_Rijndael);
  Encrypt('d:\test.bin', 'Test', TCipherClass(DECClassByName('IDEA', TCipher)));
end;
Gruß Hagen
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz