AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

createThread mit Methode als Parameter

Ein Thema von SebE · begonnen am 15. Aug 2009 · letzter Beitrag vom 16. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2   
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

createThread mit Methode als Parameter

  Alt 15. Aug 2009, 14:32
Hallo,
ich hab ein rel. simples Problem:

createThread(nil, 0, MachWas, nil, 0, fMainThreadID); und zwar ist MachWas eine Methode, also keine "normale" Prozedur, welche aber gewünscht ist.

Ich möchte MachWas nicht global deklarieren.
Wie kann ich dieses Problem lösen.

Danke
Sebastian
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 14:38
Du hast doch einen Parameter zur freien Verfügung. Da verwendest du dann einfach Pointer(Objekt) und castest in der Thread-Funktion zurück zum Objekttyp und rufst die Methode auf. Alternativ kannst du auch tricksen und die Methode als stdcall oder pascal deklarieren, dann brauchst du keine Helferroutine.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 14:47
Wieso leitest du nicht von der Klasse TThread ab?
fork me on Github
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#4

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 21:23
@Apollonius: mit der "Helfer"-Routine mach ich es ja zur Zeit.
Die ist aber global deklariert - das gefällt mir nicht.
Ich hab schon mit Klassen-Methoden (class procedure MacWas()) gespielt, läuft aber auch nicht (obwohl ich dache, dass wären "normale" Prozeduren)

Wie bekomme ich denn die Addresse einer Methode heraus, mit Pointer(MachWas) kann ich leider nicht casten.
Sebastian
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.474 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:03
Statt CreateThread solltest du BeginThread benutzen, denn sonst bekommt der Speichermanager nicht mit, dass er jetzt von mehreren Threads aus angesprochen wird.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:04
Damit Klassenmethoden sich wie globale Routinen verhalten, musst du ihnen bei der Deklaration noch ein 'static;' mitgeben. Die Bestandteile eines Methodenzeigers erhältst du, indem du nach TMethod castest. Wenn du auf Biegen und Brechen keine Helferfunktion willst, kannst du deine Threadmethode als stdcall oder pascal deklarieren und CreateThread so aufrufen:
CreateThread(nil, 0, TMethod(Methode).Code, TMethod(Methode).Data, 0, ID); Lass dir nebenbei gesagt sein, dass unter Delphi besser BeginThread statt CreateThread genutzt werden sollte, da dies u.A. dem Speichermanager ermöglicht, sich auf Multithreadbetrieb einzustellen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:16
Und wieso leitest du nicht von der Klasse TThread ab?
Warum möchtest du bei Threads auf objektorientierte Programmierung verzichten??
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:35
Oder guck mal hier: http://www.michael-puff.de/Artikel/CallbackMethod.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:39
Ist es nicht ein bisschen verschwenderisch, eine ganze Speicherseite für 15 Bytes zu allozieren, wenn Windows schon einen Kontext-Parameter anbietet?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: createThread mit Methode als Parameter

  Alt 15. Aug 2009, 22:46
Ich habe den Code lange nicht mehr angeguckt. Er ist eventuell verbesserungswürdig. Verbesserungsvorschläge nehme ich gerne entgegen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 04:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf