AGB  ·  Datenschutz  ·  Impressum  







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

Proceduren Pointer übergeben

Ein Thema von Desmulator · begonnen am 24. Jun 2008 · letzter Beitrag vom 24. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#1

Proceduren Pointer übergeben

  Alt 24. Jun 2008, 17:52
Hallo Leute,
also ich komme mal direkt zur sache: es geht darum, einer ThreadFunktion einen Pointer auf eine andere Funktion zu übergeben, die dann ausgeführt werden soll.

Delphi-Quellcode:
  TThreadInfo = record
    Address : TThreadProcedure;
    Param : Pointer;
  end;
  PThreadInfo = ^TThreadInfo;

...

procedure ThreadProcedure(Info : PThreadInfo); stdcall;
begin
  WriteLn('Hallo Welt!');
  Info.Address(Info.Param);
  FreeMem(Info,SizeOf(TThreadInfo));
  ThreadTerminated := true;
  ThreadReleased := false;
end;

...
  ThreadInfo.Address := ThreadStartAddress;
  ThreadInfo.Param := Param;
  GetMem(ThreadPosition,SizeOf(TThreadInfo));
  Move(ThreadInfo,ThreadPosition^,SizeOf(TThreadInfo));
  ThreadHandle := CreateThread(nil,0, @ThreadProcedure, ThreadPosition, 0, ThreadID);
"Hallo Welt!" wird ausgegeben, dannach erhalte ich eine Zugriffsverletzung. Allerdings stimmt der Wert in Param, wodurch ich davon ausgehe das der Record der richtige ist. Dann wird der Fehler wohl in dem Funkionsaufruf liegen...

Naja bis denne
Lars
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#2

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:06
Du dereferenziert Info nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#3

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:17
Lars
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:19
Zitat von Cyf:
Du dereferenziert Info nicht.
das sollte Delphi in diesem Fall doch automatisch machen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#5

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:22
Ja, davon bin ich auch ausgegangen, allerdings scheint es das nicht gemacht zuhaben, da es nun mit einem kleinen ^ geht.
Ich wäre daher niemals auf die Idee gekommen, dass es nicht derefenziert ist.
Lars
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#6

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:24
Zitat von himitsu:
Zitat von Cyf:
Du dereferenziert Info nicht.
das sollte Delphi in diesem Fall doch automatisch machen.
Er übergibt nicht ein TThreadInfo sondern einen Zeiger darauf (PThreadInfo), ich bin nicht 100% sicher aber ich denke nur Obekte, Rekords und "var-Funktionsparameter" werden automatisch dereferenziert (eigentlich finde ich auch, dass das schon für Verwirrung genug in Delphi sorgen kann).

[Edit] Hmm... heute hab ichs mit Edits... naja
Bei der Gelegenheit, warum definierst du nicht eifach den Parameter als TThreadInfo, das wäre eigentlich viel einfacher und leichter verständlich, der Pointer auf den Pointer ist da eigentlich volkommen unnötig.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:29
Gibt es einen bestimmten Grund, weshalb du die Klasse TThread nicht benützt?
Ich meine, man kann sich das Leben einfach oder schwer machen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#8

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:35
@Cyf :
Wenn ich dich richtig verstanden habe, willst du wissen, warum ich den speicher da reserviere und den Inforecord reinschiebe?
Nun wenn ich den Pointer auf ThreadInfo übergeben würde, wäre dieser genillt, da die Procedure dannach zuende ist, bevor der
Thread überhaupt darauf zugreifen kann.

@shmia : aus spaß an non-VCL und an abneigung gegen Classes und SysUtils und den Rest
Lars
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#9

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 18:48
Eigentlich meinte ich, warum du den Funktionskopf nicht so realisierst und den alten Body beibehälst:

procedure ThreadProcedure(Info : TThreadInfo); stdcall; Da TThreadInfo für sich bereits ein Pointer ist, er wird lediglich benutzt als wäre er keiner.
Was du machst ist Pointer auf Pointer und das hab ich eigenlich seit Stringtabellen in C nicht mehr gebraucht (oder zumindest so gut wie nie, es gibt ja noch andere Arten mehrdimensionaler arrays).
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Proceduren Pointer übergeben

  Alt 24. Jun 2008, 19:02
TThreadInfo ist doch kein Pointer sondern eine Struktur
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:47 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