Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zum Code von Luckies FileCrypter (https://www.delphipraxis.net/37524-frage-zum-code-von-luckies-filecrypter.html)

Matze 6. Jan 2005 20:59


Frage zum Code von Luckies FileCrypter
 
Hallo!

Ich habe eine Frage zum Code von Luckies FileCrypter.

Ich wollte mich mal näher mit dem Dec von Hagen Reddmann (negaH) beschäftigen, da dachte ich, ich schaue mir Luckies Code an, da dieser immer ordentlich formatiert, kommentiert und sauber programmiert ist. Ich verstehe ihn soweit auch ganz gut, nur habe ich folgendes Problem:

Verschlüsseln kann man die Dateien ohne Probleme in einer Schleife, wenn man mehrere auf einmal verschlüsseln möchte, nur beim Entschlüsseln habe ich Probleme, da der Thread einige zeit zum Entschlüsseln benötigt und währenddessen schon die nächste Datei entschlüsselt wird, was natürlich nicht funktionieren kann.

Ich müsste also Abfargen, ob der Thread seine Funktion schon erfüllt hat und nun für die nächste Datei bereit ist.

So geht es nicht, da der Thread hier noch arbeitet, während das Programm schon bei der nächsten Datei ist:
Delphi-Quellcode:
  for i := 0 to Anz - 1 do
  begin
    if ReadFileHeader(StrList[i], FileHeader) then
    begin
      CipherClass := FileHeader.FCipherClass;
      HashClass := FileHeader.FHashClass;
      HashEncodedFile := FileHeader.FHashString;

      RunDecodeThread(StrList[i], ExtractFilePath(StrList[i]), Edit5.Text,
        HashEncodedFile, HashClass,
        CipherClass, Handle);
    end;
Wie realisiert man das?

Luckie 6. Jan 2005 21:04

Re: Frage zum Code von Luckies FileCrypter
 
Hm. Sollte eigentlich kein Problem sein. Wenn du 5 Dateien in der Liste hast, dann hast du eben 5 Threads zum Decodieren laufen. Da muss kein Thread warten. Das ist ja Sinn und Zweck des ganzen.

Matze 6. Jan 2005 21:07

Re: Frage zum Code von Luckies FileCrypter
 
Das dachte ich auch erst, da Windows ja gut mit mehreren Threads auskommt, aber nach ca. 4 bis 5 Dateien kommt eine AccessViolation, und ich kann es nur darauf zurückführen.

Ich sehe gerade, bei mir laufen 623 Threads. Bisschen viel. Könnte aber daran liegen, da ich das Programm oft zu dieser AccessViolation gezwungen habe.

Luckie 6. Jan 2005 21:09

Re: Frage zum Code von Luckies FileCrypter
 
623 Thread die deinem Prozess gehören oder 623 Threads im ganzen Windows? Ich habe hier nur ca. 250 Threads laufen.
Stimmt denn, was in der Varaiable Anz drinsteht?

Matze 6. Jan 2005 21:11

Re: Frage zum Code von Luckies FileCrypter
 
623 in ganz Windows, ich reboote mal, dann sind's sicher weniger. Der Wert in der Variablen 'Anz' stimmt.

Nachtrag: Nach dem Neustart habe ich über 630 Threads in Windows. :?

Luckie 7. Jan 2005 04:19

Re: Frage zum Code von Luckies FileCrypter
 
Wer bietet mehr? Nicht shclecht, aber das sollte nicht das Problem sein. Greifen deine Threads auf eine gemeinsame globale Varaible zurück? Ansonsten hätte ich auch keine Idee. Schick mir das Projekt einfach mal.

Matze 7. Jan 2005 09:18

Re: Frage zum Code von Luckies FileCrypter
 
Liste der Anhänge anzeigen (Anzahl: 1)
5:19 Uhr :shock:

Zitat:

Zitat von Luckie
Wer bietet mehr? Nicht shclecht, aber das sollte nicht das Problem sein.

Irgendwie weiß ich nicht, was soviele Threads erzeugt, ich forsche das mal mit dem Code aus der CodeLib nach...

Zitat:

Zitat von Luckie
Greifen deine Threads auf eine gemeinsame globale Varaible zurück? Ansonsten hätte ich auch keine Idee.

Ich habe es so gelöst, wie du auch, denke ich.
Der Fehler tritt komischerweise nur manchmal auf.

Zitat:

Zitat von Luckie
Schick mir das Projekt einfach mal.

Ich habe es hier mal angehängt, dann kannst du dir das näher anschauen, vielleicht findest du ja den Fehler.
Mir ist das auch nicht sonderlich wichtig, nur würde mich interessieren, was ich falsch mache. Bestimmt ist's so ein ganz blöder Leichtsinnsfehler.

Luckie 7. Jan 2005 09:26

Re: Frage zum Code von Luckies FileCrypter
 
Zitat:

Zitat von Matze
5:19 Uhr :shock:

Ich bin aus dem Bett gefallen. :mrgreen:

Zitat:

Zitat:

Zitat von Luckie
Schick mir das Projekt einfach mal.

Ich habe es hier mal angehängt, dann kannst du dir das näher anschauen, vielleicht findest du ja den Fehler.
Mir ist das auch nicht sonderlich wichtig, nur würde mich interessieren, was ich falsch mache. Bestimmt ist's so ein ganz blöder Leichtsinnsfehler.
Ich werde es mir mal angucken. Im Moment bereite ich mich allerdings auf einen XP Home neu aufsetzten Großeinsatz bei einem Bekannten meiner Eltern heute Abend vor. ;) Mich gruselt es schon davor die ISDN Anlage da wieder zu installieren. *grusel*

Matze 7. Jan 2005 09:30

Re: Frage zum Code von Luckies FileCrypter
 
OT:

Zitat:

Zitat von Luckie
Ich bin aus dem Bett gefallen. :mrgreen:

Und dann dachtest du sofort an deinen FileCryper. :lol:

Zitat:

Zitat von Luckie
Im Moment bereite ich mich allerdings auf einen XP Home neu aufsetzten Großeinsatz bei einem Bekannten meiner Eltern heute Abend vor. ;) Mich gruselt es schon davor die ISDN Anlage da wieder zu installieren. *grusel*

Viel Spaß beim Gruseln, viel Erfolg und lass dir Zeit, mach dir wegen mir keinen Stress.


Edit 1+2: Tippfehler verbessert

Luckie 7. Jan 2005 09:41

Re: Frage zum Code von Luckies FileCrypter
 
Ich bekomme ab und zu mal diese Meldung:
Zitat:

---------------------------
Project1
---------------------------
Datei D:\Dokumente\Funstuff\bundeswehr.mpg kann nicht geöffnet werden.
---------------------------
OK
---------------------------
Aber ansonsten keine AV oder so was.

Matze 7. Jan 2005 11:02

Re: Frage zum Code von Luckies FileCrypter
 
Danke, dass du dir das angesehen hast. Ich forsche mal weiter, wo der Fehler liegen könnte, vielleicht liegt es wirklich daran, dass ich so viele Threads laufen habe, aber damit sollte Windows XP eigentlich klar kommen.

Motzi 7. Jan 2005 12:35

Re: Frage zum Code von Luckies FileCrypter
 
Also die 630 Threads sollten nicht das Problem sein..! Aber falls du wissen willst weshalb das bei dir so viele sind kannst du der Sache mit meinem X-Spy ganz gut auf den Grund gehen..! ;)

Ich hab mir deinen Code mal ein bisschen angeschaut und mir ist dabei aufgefallen, dass du in deinem Decode-Thread direkt auf deine Form zugreifst:
Delphi-Quellcode:
Form1.LblStatus.Caption := 'Status: Prüfsumme erzeugen...';

Matze 7. Jan 2005 20:19

Re: Frage zum Code von Luckies FileCrypter
 
Zitat:

Zitat von Motzi
Ich hab mir deinen Code mal ein bisschen angeschaut und mir ist dabei aufgefallen, dass du in deinem Decode-Thread direkt auf deine Form zugreifst ...

Äh, und? ;) Macht Luckie in seinem Programm genauso, das sollte nicht das Problem sein. Mir geht es auch nicht darum, das jetzt wunderbar sauber zu programmieren, mich würde nur interessieren, wieso das nicht geht.

Ich habe festgestellt, dass, wenn ich mehrere Dateien gleichzeitig entschlüssele, einige hinterher 0 Byte Dateien sind, so rund die Hälfte. Auch werden diese nicht korrekt verschlüsselt. Anstatt 3.5 MB, haben sie nach dem Verschlüsseln 500 kB und nach darauffolgendem Entschlüsseln 0 Byte.

Kannst du, Luckie, oder auch jemand anderes, mir sagen, woran das liegen könnte?

Luckie 8. Jan 2005 01:08

Re: Frage zum Code von Luckies FileCrypter
 
Zitat:

Zitat von Matze
Zitat:

Zitat von Motzi
Ich hab mir deinen Code mal ein bisschen angeschaut und mir ist dabei aufgefallen, dass du in deinem Decode-Thread direkt auf deine Form zugreifst ...

Äh, und? ;) Macht Luckie in seinem Programm genauso,

Man jetzt hast du mir aber einen Schrecken eingejagt. Ich dachte schon ich da wirklich so einen Mist verzapft. Ich tue es natürlich nicht! Die Klasse StreamProgressAdapert schick eine eigene Nachricht über den Fortschritt an das Hauptfenster. Ich greife nicht aus der Thread-Klasse auf die Form zu.

Delphi-Quellcode:
procedure TStreamProgressAdapter.DoProgress(Writing: Boolean);
begin
  FPercent := Round(100 / FMax * FCurrentPos);
  SendMessage(FHandle, SPM_PROGRESS, 0, FPercent);
  if FPercent = 100 then
    SendMessage(FHandle, SPM_DONE, 0, 0)
end;

Matze 8. Jan 2005 08:35

Re: Frage zum Code von Luckies FileCrypter
 
Ich spreche von der Unit DecodeThread, da hast du folgendes stehen:

Delphi-Quellcode:
procedure TDecodeThread.Execute;
var
  HashDecodedFile: string;
begin
  if not DecodeFile(FFilename, FFolder, FPW, FCipherClass, FHandle) then
    Messagebox(Handle, 'Fehler beim Entschlüsseln der Datei.',
      'Datei entschlüsseln', MB_ICONSTOP);
  Form1.Statusbar1.Panels[0].Text := StatusArray[2]; //<==
  Form1.Statusbar1.Refresh;                         //<==

...
Aber das ist eigentlich ja auch nebensächlich.

Luckie 8. Jan 2005 12:32

Re: Frage zum Code von Luckies FileCrypter
 
Mist, ich wußte doch, dass ich was vergessen hatte. Das sollte man logischerweise via Synchronize machen.

Matze 9. Jan 2005 18:50

Re: Frage zum Code von Luckies FileCrypter
 
Ich habe heute noch daran rumgespielt, komme aber auf keinen grünen Zweig, irgendwie ist das seltsam.

Btw: Mein Vater hat sich Win XP (inkl SP2) gekauft und direkt nach der Installation laufen über 500 Threads ;)

Matze 23. Jan 2005 23:49

Re: Frage zum Code von Luckies FileCrypter
 
Ich pushe mal, vielleicht weiß einer, weshalb das Probelm auftritt. Ich hatte nämlich noch nicht vor, aufzugeben. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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