AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage Thread...

Ein Thema von calibra301 · begonnen am 13. Feb 2018 · letzter Beitrag vom 16. Feb 2018
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 09:56
Ach ja,

und dieses "Arbeite diverses Elend ab..." wird unterbrochen
wenn ich im Mainform z.B. ein Mainmenue öffne...

Gruss
Calli
Siehe meine Glaskugel-Antwort eins drüber.
Außerdem muss das application.ProcessMessages; aus dem Thread raus!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 10:07
Vielleicht ist in dem Elend auch noch ein application.ProcessMessages; drin ...
  Mit Zitat antworten Zitat
calibra301

Registriert seit: 20. Mär 2009
96 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 11:02
@NeutralGeneral,

schön das sich deine Glaskugel offenbar guter Pflege erfreut
Mit "Start" statt "Execute" macht der Thread nun teilweise was er soll.

Teilweise weil: "Arbeite diverses Elend ab..." endet mit einer OpenGL Ausgabe.
Die geht nun nicht mehr.

Die Zeichenroutine ist Teil der TOutputengine. Die "TOutputengine.drawGL" hab ich im Codebeispiel unterschlagen.
Der Handle für das OpenGL ist eine globale Variable vom Mainform.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 11:16
Teilweise weil: "Arbeite diverses Elend ab..." endet mit einer OpenGL Ausgabe.
Die geht nun nicht mehr.

Die Zeichenroutine ist Teil der TOutputengine. Die "TOutputengine.drawGL" hab ich im Codebeispiel unterschlagen.
Der Handle für das OpenGL ist eine globale Variable vom Mainform.
Machen wir einen Deal:
Du siehst zu, dass die ganze OpenGL Ausgabe rein im Main Thread funktioniert und danach kümmern wir uns darum das Rendering in einen eigenen Thread auszulagern?
  Mit Zitat antworten Zitat
calibra301

Registriert seit: 20. Mär 2009
96 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 12:07
Danke,

werde ich umbauen sobald meine Regierung mir etwas Freizeit einräumt

Gruss
Calli
  Mit Zitat antworten Zitat
calibra301

Registriert seit: 20. Mär 2009
96 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 12:29
Wird aber wohl erst morgen was...

So dankbar ich auch für eine Lösung bin, es wäre aber trotzdem
schön wenn mir jemand erklären könnte WARUM das nun plötzlich nicht mehr geht.
Nur des Verständnisses wegen..

Auch ist mir der Unterschied zwischen Start und Execute nicht klar. Viel findet man nur in
Englisch und mit mitte 60 ist das nicht so meins...
Hatte das so verstanden das mit Thread.create das Ding erstellt und und ich dann nur irgendwie meine
Schleife starten muss die im erzeugtem Thread läuft.

Gruss
Calli
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.857 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verständnisfrage Thread...

  Alt 13. Feb 2018, 13:03
Auch ist mir der Unterschied zwischen Start und Execute nicht klar. Viel findet man nur in
Englisch und mit mitte 60 ist das nicht so meins...
Hatte das so verstanden das mit Thread.create das Ding erstellt und und ich dann nur irgendwie meine
Schleife starten muss die im erzeugtem Thread läuft.
Ja, fehlende Englischkenntnisse sind nicht gerade förderlich.

Der Punkt ist, dass Execute intern quasi aus dem Thread heraus aufgerufen werden muss, damit die Befehle darin auch im Thread laufen. Wenn man selbst Execute aufruft, tut man das ja aus dem Hauptthread heraus und damit bleibt man auch im Hauptthread.

Du kannst ja mal einen Haltepunkt in das Execute setzen und einfach mal den Stacktrace anschauen. Vielleicht wird es dann klarer.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
calibra301

Registriert seit: 20. Mär 2009
96 Beiträge
 
Delphi XE8 Professional
 
#8

AW: Verständnisfrage Thread...

  Alt 16. Feb 2018, 08:48
Hallo,

kurze Rückmeldung von der Front

Konnte es nicht sein lassen und hab selber probiert.
Vielleicht hilfts ja jemand anderem. Ich hasse Threads wo die Lösung gefunden aber
nicht dokumentiert wird..sogar für Dummy´s wie mich

Der ganze OpenGL Kram im Mainthread.

Der ganze Datenkram die die einzelnen Threads sammeln kommmt in public Arrays des jeweiligem Threads.

Wenn alle Geräte abgearbeitet sind kommt ein

Synchronize(form1.updategui);

updategui holt sich dann in einer Schleife die Daten aus den Einzelthreads und
zeichnet. Gehen tuts...ob es so die "feine Englische Art" ist weiss ich nicht...

Leider hab ich noch eine Baustelle mit der ich euch gern belästigen würde.
Hab die Frage auch schon öfter gefunden , leider nur mit Antworten wie "guck da...sieht man doch..."

Es geht um die dynamische Erzeugung eines TIDUDPServers.

Delphi-Quellcode:
 try
  FSocket := TIdUDPServer.Create(nil);
  FSocket.ThreadedEvent := True;
  FSocket.DefaultPort := Artnet_Port;
  FSocket.ThreadedEvent:=true;
  FSocket.ReuseSocket:=rstrue;
// FSocket.OnUDPRead := ReadUDP;
  FSocket.BroadcastEnabled := True;
  FSocket.Active := True;
  except

  end
Was ich nicht hinbekomme ist die eigene Deklaration der ReadUDP Prozedur sowie des
Aufrufes FSocket.OnUDPRead:= ???

Im Grunde macht es vielleicht Sinn das auch in einen eigenen Thread auszulagern
und auch mit Sycronize zu arbeiten.

Danke und Gruss
Calli
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#9

AW: Verständnisfrage Thread...

  Alt 16. Feb 2018, 10:50
Wenn man selbst Execute aufruft
Darum ist Execute auch eigentlich PROTECTED, denn so kann man es garnicht erst von außen aufrufen.
OK strict protected wäre besser, und es wäre unklug, wenn man beim Ableiten/Überschreiben die Sichtbarkeit dieser Methode verändert. (vergisst das Protected anzugeben und es z.B. nach Public verschiebt)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:07 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 by Thomas Breitkreuz