AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Endlosschleife + WarteFunktion ohne Programm zu blockieren
Thema durchsuchen
Ansicht
Themen-Optionen

Endlosschleife + WarteFunktion ohne Programm zu blockieren

Offene Frage von ".chicken"
Ein Thema von .chicken · begonnen am 17. Dez 2007 · letzter Beitrag vom 29. Dez 2007
Antwort Antwort
Seite 2 von 4     12 34      
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#11

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 17. Dez 2007, 19:46
WEiss ich nicht genau, aber ist ja egal ich habe hier im Forum zwei Tutorials gefunden. Aber das ist ja meeeeega umfangreich!? o.O
Das wird ja ne heidenArbeit isch da durchzuforsten!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 17. Dez 2007, 19:54
Nee, wieso.
1. Ansatz ist einfach eine Klasse von TThread ableiten und dann die Execute-Methode überschreiben. Und darin legst du den Code des Threads. Fertig. Musst natürlich beachten, dass du jetzt nicht einfach so kreuz und quer auf Variablen zugreifen kannst.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#13

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 17. Dez 2007, 20:13
Ich hab diesen Wälzer gefunden ^^
http://www.michael-puff.de/Developer...mit_Delphi.pdf
Habe mich shcon bisl durchgeforstet aber ist für imch nicht so einfach zu verstehen. Habe aber nun schon ein grobes Verständnis was passiert und was nicht passieren sollte ^^

Wenn ich jetzt noch ein simples Tut hätte, dass sich nur damit beschäftigt wie man das benutzt, dann würd das sicher was werden ^^

Edit: Achso, dann lager ich am besten meine Endlosschleife in einen Thread aus und die verarbeitung der nodeNames oder? Weil ich da dann ja noch die Wartezeit mit dem Thread erledigen könnte!?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 17. Dez 2007, 20:25
Benutze doch einfach CreateThread oder BeginThread Dann kannst du in deinem Thread die Arbeiten durchführen und dein Programm friert trotzdem nichtein.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#15

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 17. Dez 2007, 20:30
Zitat von Zacherl:
Benutze doch einfach CreateThread oder BeginThread Dann kannst du in deinem Thread die Arbeiten durchführen und dein Programm friert trotzdem nichtein.
Da wurschtel ich mich doch grade durch Meister ^^
Danke trotzdem
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#16

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 18. Dez 2007, 21:26
Ok, ich raff das mit den Threads einfach noch nicht. Ich würde mich sehr freuen, wenn ihr euch mal meine Unit ansehen würdet und mir ein paar Anstöße geben könntet! Möchte keinen vollständigen Code, denn ich möchte verstehen was ich tue

So, ich weiss einfach nicht wie ich da die Threads einbaun soll. Soll ich beim DialogStart einen Thread erstellen, der dann ProfceedDialog aufruft? Wie mache ich das? Hierbei sagt er mir immer
BeginThread(nil, 0, TFNThreadStartRoutine(@ProceedDialog), nil, 0, ThreadID); "Variable Required udn zeigt auf das @ProceedDialog.

Ich habe keinen Plan wie ich das nun realisieren soll, und die Parameter der BeginThread Funktion verstehe ich auch nicht so recht, bin aus den Tut Beschreibungen net recht schlau geworden!

Edit: Achso, hilfreich wäre vielleicht zu wissen, dass das ganze als DialogSystem in einem Adventure genutzt werden soll!
Angehängte Dateien
Dateityp: pas dialogunit_192.pas (4,4 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#17

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 19. Dez 2007, 08:12
Hallo,
Um auf das eigentliche Problem zurückzukommen:
Wenn du ein OnPaint provozieren möchtest, so rufe auf:
<Komponente>.Invalidate Damit wird das Betriebssystem bei der nächsten Gelegenheit ein repaint veranlassen ...
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 19. Dez 2007, 09:40
ProceedDialog muss eine Funktion sein mit folgender Deklaration:
function ProceedDialog(param:pointer):integer; Beachte, dass dies keine Methode ist, also nicht innerhalb einer Klasse sein darf.

Ausserdem darfst du in einem Thread nicht auf globale Variablen zugreifen, bzw. auf Variablen, die auch der Main-Thread gleichzeitig benutzen könnte. Wenn dies zwingend notwendig wird, muss man eben synchronisieren.

Du benutzt jetzt BeginThread. Warum nimmst du nicht eine Ableitung der Klasse TThread? Das ist für den Anfang viel einfacher. Vor allem sind die Änderungen, die du machn müsstest überschaubarer, wenn du die Klasse TDialogclass von TThread ableitest.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#19

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 19. Dez 2007, 11:57
Ok, danke euch beiden!
Sirius, kannst du das etwas genauer erklären? Also ich leite die DialogUnit von TThread ab...sobald sie erzeugt wird ist das dann ein eigener Thread? Dann muss ich aber trotzdem noch mit den Variablen aufpassen oder? Also habe was von Critical Sections gelesen, das müsste sich dafür doch eignen oder?

D.h. die einzige Änderung die ich machen müsste, wäre die Klasse von TThread abzuleiten und dann kann ich quasi alles so lassen, abgesehn davon dass ich mit den globalen Variablen aufpassen muss?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Endlosschleife + WarteFunktion ohne Programm zu blockier

  Alt 19. Dez 2007, 12:02
Fast. Ich sehe halt den Rest des Programms nicht (besonders, wann du Methoden/Eigenschaften von der Klasse verwendest). Und kann nicht sagen, ob es alles ist.
Und zudem musst du dann die Execute-Methode anlegen/überschreiben. Die wird nämlich ausgeführt.
Alle Parameter die du brauchst übergibst du im Constructor. Wenn du nachher noch Werte zwischen den Threads austauschen willst, dann würde ich dir erstmal zu "synchronize" raten (ist für den Anfang am einfachsten und dürfte bei dir auch ausreichen; da brauchst du dich mit CriticalSections noch nicht zu beschäftigen). Kann ich dir besser an einem Beispiel erklären, wenn du eins hast.

Edit: Anhang angefügt
Ich habe mal die Änderungen, die ich jetzt gesehen habe gemacht. Ob das jetzt alles richtig ist, weis ich nicht, da ich den Rest des Programmes nicht kenne.
GEdacht ist es jetzt so, dass du das Objekt instanzierst und damit läuft der Thread gleich los (außer die Exception wird geworfen)und ruft irgendwann mal das TOnChange-Ereignis auf. Und genau darin bzw. nur darin darfst du dir den vollen Zugriff auf dein Objekt erlauben.
Angehängte Dateien
Dateityp: pas dialogunit2_882.pas (5,0 KB, 7x aufgerufen)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 03:11 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