Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufall generieren dauert lange (https://www.delphipraxis.net/22949-zufall-generieren-dauert-lange.html)

Ultimator 26. Mai 2004 17:58


Zufall generieren dauert lange
 
Hallo!
Ich habe jetzt ein Verschlüsselungsprogramm geschrieben. Ich bin auch ziemlich weit, aber jetzt wirft sich eine Frage auf:
Wenn ich für einen Text ein Zufallspasswort generieren lassen will, und der Text recht lang (>200 Zeichen) ist, dann dauert das. Sogar sehr lange. So, nun möxhte ich dem Benutzer die Möglichkeit geben, den ganzen Vorgang abzubrechen, doch wie mache ich das?

Meflin 26. Mai 2004 18:01

Re: Zufall generieren dauert lange
 
poste doch mal den entsprechenden source teil. prinzipiell hilft Hier im Forum suchenapplication.processmessages oder Hier im Forum suchenmultithreading

Ultimator 26. Mai 2004 18:04

Re: Zufall generieren dauert lange
 
Application.Processmessagen hab ich schon an allen möglichen und unmöglichen Stellen eingefügt, aber hier trotzdem mal der Code zum generieren des Passwortes:
Delphi-Quellcode:
procedure TForm1.CreateOTP(OriginalText: string);
var i: integer;
begin
  for i := 1 to length(OriginalText) do
  begin
    Memo3.Text := Memo3.Text + inttostr(random(255));
    Application.ProcessMessages;
  end;
end;
Ich hoffe, ihr könnt mir helfen. :pale:

Meflin 26. Mai 2004 18:07

Re: Zufall generieren dauert lange
 
dann muss da noch in die schleife sowas rein wie if blAbbruch = true then break; blAbbruch muss dann natürlich boolean sein. wenn du dann per buttonclick blAbbruch 8globale variable) auf true setzt, stoppt die schleife!

Ultimator 26. Mai 2004 18:09

Re: Zufall generieren dauert lange
 
OK, danke! Hat mir gehlofen :thuimb:
Aber warum dauert es so lange, 200 Zufallszahlen zu finden?

Meflin 26. Mai 2004 18:10

Re: Zufall generieren dauert lange
 
kann ich dir auch nicht sagen. aber mir fällt gerade auf, dass du scheinbar kein randomize verwendest, was du tun solltest, da sonst random immer die gleichen zufallszahlen liefert!

Ultimator 26. Mai 2004 18:11

Re: Zufall generieren dauert lange
 
Doch, ich hab ein randomize im FormCreate. :wink:

Meflin 26. Mai 2004 18:12

Re: Zufall generieren dauert lange
 
achso, dann passts ja! wär eher kontraproduktiv wenn dus nicht drin hättest :wink:

shmia 26. Mai 2004 18:12

Re: Zufall generieren dauert lange
 
Zitat:

Zitat von Ultimator
Delphi-Quellcode:
procedure TForm1.CreateOTP(OriginalText: string);
var i: integer;
begin
  for i := 1 to length(OriginalText) do
  begin
    Memo3.Text := Memo3.Text + inttostr(random(255));
    Application.ProcessMessages;
  end;
end;

Das ist aber extrem ungünstig programmiert!!!
Besser so (braucht nur wenige ms):
Delphi-Quellcode:
   Memo3.Text := RandomString(Length(OriginalText));
Siehe:
(CodeLibrary) Zufallstrings erzeugen

Ultimator 26. Mai 2004 18:16

Re: Zufall generieren dauert lange
 
Oh, hehe. Muss ich übersehen haben :oops:
Ist das dann auch echter Zufall oder wieder nur Pseudo-Zufall?

Ultimator 26. Mai 2004 18:23

Re: Zufall generieren dauert lange
 
Juhu, danke! Jetzt geht's endlich. :party:

Chewie 26. Mai 2004 18:49

Re: Zufall generieren dauert lange
 
Zitat:

Zitat von Ultimator
Ist das dann auch echter Zufall oder wieder nur Pseudo-Zufall?

Pseudo-Zufall. Reine softwre-basierte "Zufallsgeneratoren" liefern immer nur Pseudo-Zufallszahlen.
Nur mit entsprechender Hardware, die sich Quanteneffekte zunutze macht, ist echter Zufall möglich. Zumindest falls unser phsyikalisches Weltbild der Realität entspricht.

Ultimator 26. Mai 2004 19:02

Re: Zufall generieren dauert lange
 
Ok, naja. Es wird wahrscheinlich eh keiner hergehen und versuchen, einen Text zu knacken, der mit Hilfe meines Programms verschlüsselt wurde :mrgreen:
Und, bitte! Keine Grundsatzdiskussionen wegen dem hier:
Zitat:

Zitat von Chewie
Zumindest falls unser phsyikalisches Weltbild der Realität entspricht.

*g*

Für mich jedenfalls reicht Pseudo-Zufall und wahrscheinlich für jeden hier im Forum auch (außer negaH vielleicht :mrgreen: )

GuenterS 26. Mai 2004 19:03

Re: Zufall generieren dauert lange
 
Delphi-Quellcode:
procedure TForm1.CreateOTP(OriginalText: string);
var i: integer;
begin
  for i := 1 to length(OriginalText) do
  begin
    Memo3.Text := Memo3.Text + inttostr(random(255));
    if (i mod 25 = 0) then
       Application.ProcessMessages;
  end;
end;

probier mal ob das schneller ist. (ich gehe davon aus dass du einen 200 Byte Langen OriginalText hast, bzw. dieser nicht um größenordnungen Größer ist.

Ultimator 26. Mai 2004 19:08

Re: Zufall generieren dauert lange
 
Nö, danke. Ist auch nicht schneller, eher im Gegenteil.
Außerdem soll der User ja auch Texte >200 Zeichen verschlüsseln können.

nailor 26. Mai 2004 19:13

Re: Zufall generieren dauert lange
 
mach dir ne lokale variable, und mach das nicht direkt mit "Edit3.Text"! dann geht das vieeeeeeeeeel schneller, weil die Lese und Schreib Methode nur je einmal und nicht 255 mal durchgeführt wird.

Ultimator 26. Mai 2004 19:15

Re: Zufall generieren dauert lange
 
Ich versteh jetzt nicht ganz, was du von mir willst? :gruebel:
Erklär bitte nochmal genauer.

nailor 26. Mai 2004 20:50

Re: Zufall generieren dauert lange
 
Delphi-Quellcode:
procedure TForm1.CreateOTP(OriginalText: string);
var i: integer; temp: string;
begin
temp = '';
  for i := 1 to length(OriginalText) do
  begin
    temp := temp + inttostr(random(255));
  end;
Memo3.Text := temp;
end;
guckst du da^^

eroe 26. Mai 2004 21:58

Re: Zufall generieren dauert lange
 
Zitat:

Zitat von Ultimator
Oh, hehe. Muss ich übersehen haben :oops:
Ist das dann auch echter Zufall oder wieder nur Pseudo-Zufall?

[OT] Hihi, da hat anscheinend jemand aufmerksam unsern Thread gelesen :D [/OT]


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