AGB  ·  Datenschutz  ·  Impressum  







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

schleife will einfach nicht.

Ein Thema von opfer15 · begonnen am 3. Mär 2008 · letzter Beitrag vom 4. Mär 2008
Antwort Antwort
Seite 1 von 3  1 23      
opfer15

Registriert seit: 28. Jun 2006
6 Beiträge
 
#1

schleife will einfach nicht.

  Alt 3. Mär 2008, 18:10
So ich hab folgende Aufgabe:

Schreibe ein Programm, das ein Ping und ein Pong; ausgibt. Diese beiden Prozesse sollen im
Wechselabstand von je zwei Sekunden auf dem Bildschirm dargestellt werden. Hierbei ist die
Computersprache frei wählbar.

Ich hab es bereits in Bat gelöst, da war es auch sau einfach, aber jez wollt ich das in Delphi realisieren und da kamen dann die Probleme.

Und zwar sieht das derweil wie folgt aus.

Ich habe versucht, meine endlosschleife, die ich ja laut aufgabenstellung brauche, in einen extra Thread zu packen. Nehm ich die schleife raus, funktioniert das Program auch, doch ist die Schleife aktiv hört der ganze spass beim delay auf.
Angehängte Dateien
Dateityp: zip neu_winrar-zip-archiv__2__442.zip (6,9 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:20
Muss es denn unbedingt eine Schleife sein? Ich denke, ein Timer würde reichen
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:21
Delphi-Quellcode:
procedure SchleifenThread.Execute;
var
i:integer;
begin
while i = 0 do
  begin
  Synchronize(UpdatePing);
  Delay(2000);
  Synchronize(UpdatePong);
  end;
end;
woher weißt du das in i eine 0 steht?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:23
...und im Thread sollte es Sleep(2000) heissen und nicht Delay(2000) !!
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:24
hm ich habs zwar nicht in delphi kompiliert aber guck dir mal deine schleife an:

Delphi-Quellcode:
procedure SchleifenThread.Execute;
var
i:integer;
begin
while i = 0 do
  begin
   Synchronize(UpdatePing);
   Delay(2000);
   Synchronize(UpdatePong);
  end;
end;
Was passiert? Es macht Ping, dann schläft er 2 sekunden, dann macht es Pong und sofort danach wieder Ping. Bau mal nach dem UpdatePong noch mal ein delay(2000) ein.
Dann solltest du nicht while i=0 setzen sondern besser while not terminated.


Apropos delay(2000): Das is ja ne riesige Funkiton...wäre es nicht einfacher, sleep(2000) zu benutzen

Als im grunde sollte das meiner meinung nach so aussehen:

Delphi-Quellcode:
procedure SchleifenThread.Execute;
begin
while not terminated do
  begin
     Synchronize(UpdatePing);
     sleep(2000);
     Synchronize(UpdatePong);
     sleep(2000);
  end;
end;

Grüße
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
opfer15

Registriert seit: 28. Jun 2006
6 Beiträge
 
#6

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:41
Joah mit sleep hat sich das PRob. in wohlgefallen aufgelöst ^^ Das Delay hatte ich da noch drinne, weil ich das vorher ohne den extra thread hatte. Da das Fenster einzufrieren während ich Captions ändere, naja nicht sehr sinnvoll.

Das i=0 ist, ist einfach dafür da, dass die schleife ewig läuft, bis ich mit meinem Stop-Button i=1 setze. Wer dann wohl doch nochmal i=0 vor die schleife schreiben, sonst könnt ich das Program ja auch nur einmal Pro aufruf starten.

Wenn ich while not terminated schreiben würde, wie könnt ich die schleife dann mit einem button beenden ?
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:43
Zitat von opfer15:
Wenn ich while not terminated schreiben würde, wie könnt ich die schleife dann mit einem button beenden ?

Du fügst folgenden Code beim Button ein:

Delphi-Quellcode:
 

SchleifenThread.Terminate;
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:44
Indem du Schleifenthread.Terminate aufrufst. Wie hättest du es denn mit dem i gemacht? Das terminated ist ja genau der Grund für deine Aktion.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:46
du hast i in der prozedur deklariert, dh du kannst außerhalb der prozedur auf i nicht zugreifen!
und außerdem sind lokale variablen nicht iniziiert, dh in i steht ein zufälliger wert der nicht 0 sein muss!
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
opfer15

Registriert seit: 28. Jun 2006
6 Beiträge
 
#10

Re: schleife will einfach nicht.

  Alt 3. Mär 2008, 18:58
Also gelöst ist es jetzt geht es nur um schönheit. i hab ich in Unit 1 in public getan, sodass ich auch im Thread zugriff drauf habe. Dann am begin von Schleifenthread.execute i:= 0 und im Stop button i := 1 gesetzt. So läuft es ja. Nun nochmal die Version mit terminate versuchen.

E: Terminate ist aus der Klasse TApplication und die hab ich nicht in der free version. Es läuft und ich denk ich lass es so.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz