Autor Beitrag
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 13.02.06 20:04 
folgendes nochmal:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    

begin
  Memo1.text := '';
  Timer1.Enabled := true;
  if  Label1.Caption = '0' then
  begin
    for i:=1 to 2400000 do // 2.4 mio operationen für eine 2.4 ghz cpu
    begin                  // da 1 operationen pro ausführung gleich 2.4 mio
      Memo1.text := Memo1.text + '1' ; //operationen.
    end;
  end
  else begin
    showmessage ('-Noch zu bearbeiten-');
  end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := inttostr(strtoint(Label1.caption) + 1);
end;




is das ne endlosschleife eigentlich nichtoder ?


grüße g1o

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 13.02.06 20:08 
1. Delphi-Tags verwenden!!! Edit: Hat Christian 4u gemacht :wink:
2. Code formatieren (das ist ne beleidigung für die Augen :mrgreen:
3. Nein es ist keine. Ist die Frage was timer1 macht. Was liegt denn für ein Problem vor?
Kann sein, dass wegen der vielen Wiederholungen der Zählschleife der PC hinkt.

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 13.02.06 20:15 
-sind delphi tags ? oder wie geht das ?

-wieso formatieren ? ^^

- er hängt sich auf ganz einfach. obwohl wenn er den timer wie gesagt auf 1 setzen würde müsste er aufhöhren tut er nach einer sekunden aber nicht...


btw war der falsche code hier der aktuelle:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.Button1Click(Sender: TObject);  
var i : integer;  
      

 
begin  
  Memo1.text := '';  
  Timer1.Enabled := true;  
  if  Label1.Caption = '0' then  
  begin  
    for i:=1 to 2400000 do // 2.4 mio operationen für eine 2.4 ghz cpu  
      begin                  // da 1 operationen pro ausführung gleich 2.4 mio  
        Memo1.text := Memo1.text + '1' ; //operationen.  
      
      end;  
  end  
  else begin  
    showmessage ('-Noch zu bearbeiten-');  
    Timer1.enabled := false;
  end;  
end;  

 

 
procedure TForm1.Timer1Timer(Sender: TObject);  
begin  
  Label1.Caption := inttostr(strtoint(Label1.caption) + 1);  
end;



das war meine idee. wollte wissen wieviele operationen mein rechner pro sekunde packt.
wie verlässlich das ist, ist noch die frage (hintergrund programme etc)


grüße g1o


Zuletzt bearbeitet von g1o2k4 am Mo 13.02.06 20:17, insgesamt 1-mal bearbeitet
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 13.02.06 20:15 
2,4 Mio. Operationen stimmen schonmal von dem her nicht, weil Giga = Mrd., nicht Mio. Außerdem müsstest du BeginUpdate und EndUpdate um die Schleife rummachen und obendrein nicht mit Strings wie Memo1.Text hantieren (woher willst du wissen, wieviele Taktzyklen Delphi dann wirklich dafür benötigt?)... :roll:

AXMD
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mo 13.02.06 20:22 
user profile icong1o2k4 hat folgendes geschrieben:
-sind delphi tags ? oder wie geht das ?

-wieso formatieren ? ^^

- er hängt sich auf ganz einfach. obwohl wenn er den timer wie gesagt auf 1 setzen würde müsste er aufhöhren tut er nach einer sekunden aber nicht...


Joah richtig - so gehts.

Formatieren - wegen der Übersicht. Einrücken von Codezeilen, damit man noch durchsieht. Du wirst nachher bei großen Projekten sonst ziemlich bekloppt, wenn du das net machst ;)

Ich wette, dass er wieder da ist, wenn die Berechnungen fertig sind. Ist die Zählschleife oder der Timer das Problem?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 13.02.06 20:25 
Ich nehme mal grob an, dass du mit Hilfe des Timer ne Uhr realisieren willst, die anzeigt, wieviele Sekunden deine Operation braucht.
Abgesehen davon, dass deine Timer-Routine während der Schleife nicht aufgerufen wird (Stichwort Application.ProcessMessages), ist deine Methode denkbar ungeignet, um die Zeit zu messen. Das liegt an dem Handling von Strings (und memo.text ist ein String).

Folgendes passiert in etwa in deiner Schleife:

Durchlauf 1:
Setze den Text auf '1'. Ok.

Durchlauf 2.
Text soll verlängert werden.
Reserviere dafür neuen Speicherplatz.
Kopiere alle 1 Zeichen des alten Strings dahin, und füge '1' hinzu.
Ergebnis '11'

Durchlauf 3:
Text soll verlängert werden.
Reserviere dafür neuen Speicherplatz.
Kopiere alle 2 Zeichen des alten Strings dahin, und füge '1' hinzu.
Ergebnis '111'

Durchlauf 3:
Text soll verlängert werden.
Reserviere dafür neuen Speicherplatz.
Kopiere alle 3 Zeichen des alten Strings dahin, und füge '1' hinzu.
Ergebnis '1111'

...
Durchlauf 3000:
Text soll verlängert werden.
Reserviere dafür neuen Speicherplatz.
Kopiere alle 3000 Zeichen des alten Strings dahin, und füge '1' hinzu.
Ergebnis '1111111[...]11111'

...
Durchlauf 2.000.000:
Text soll verlängert werden.
Reserviere dafür neuen Speicherplatz.
Kopiere alle 2.000.000 Zeichen des alten Strings dahin, und füge '1' hinzu.
Ergebnis '1111111[...]11111111111'

Du hast also nicht 2.400.000 Operationen, sondern größenordnungsmäßig 2.880.000.000.000 Operationen (1+2+3+4+5+6+...) Und das ist auch auf ner schnellen CPU viel zu tun ;-)

_________________
We are, we were and will not be.
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 13.02.06 20:32 
@ koller die zählschleife ist das problem
@ AXMD das will ich ja grade herausbekommen wie das in wirklich keit in delphi aussieht
@ Gause ....hmm ok aber ich denke 11111111 + 1 is nen bischen leichter zu verarbeiten, weil der cpu cache dann nicht mit so 'riesen' zahlen wie 2000000000 + 1 = 2000000001 geprengt wird sondern die reihe von einsen ja im ram liegt und dort bleibt und noch eine 1 hinzugesendet wird


wie würdet ihr das denn schreiben damit ich weiß wieviel operationen die cpu pro sekunde packt ?
codebeispiel wäre nett, habe delphi nicht studiert oder so, erst vor 2 monaten oder so angefangen.
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 13.02.06 20:54 
den code habt ihr ja.
hier die exe
home.arcor.de/g1o2k4/Projekt1.exe


jemand ne idee ?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 13.02.06 21:01 
user profile icong1o2k4 hat folgendes geschrieben:
@ Gause ....hmm ok aber ich denke 11111111 + 1 is nen bischen leichter zu verarbeiten, weil der cpu cache dann nicht mit so 'riesen' zahlen wie 2000000000 + 1 = 2000000001 geprengt wird sondern die reihe von einsen ja im ram liegt und dort bleibt und noch eine 1 hinzugesendet wird
Die Reihe von Einsen liegt im Ram, ja. Aber nach der letzten 1 kommt möglicherweise etwas ganz anderes (z.B. eine Integervariable). Daher muss zum Hinzufügen eines weiteren Zeichens ggf. der komplette String umkopiert werden. Und das dauert auch seine Zeit.

_________________
We are, we were and will not be.
g1o2k4 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mo 13.02.06 21:53 
gibts nicht irgendwie ne schleife sowas wie

ausblenden Delphi-Quelltext
1:
2:
3:
versuche
  schreibe soviele einsen wie möglich   bis
  label1 auf 1 (also bis eine sekunde vergangen)


oder wie verhindert man das der sich aufhängt ?
#
errinnert mich nen bischen ans srinten: man will besonders schnell sein und lehnt sich nach vorn um schneller zu werden, aber wenn man sich zu weit vorbeugt verliert man das gleichgewicht und knallt hin ! ^^ (ich weiß geiler vergleich ;) )