![]() |
Proceduren Pointer übergeben
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:
"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...
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); Naja bis denne :? |
Re: Proceduren Pointer übergeben
Du dereferenziert Info nicht.
|
Re: Proceduren Pointer übergeben
:wall:
|
Re: Proceduren Pointer übergeben
Zitat:
|
Re: Proceduren Pointer übergeben
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. |
Re: Proceduren Pointer übergeben
Zitat:
[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. |
Re: Proceduren Pointer übergeben
Gibt es einen bestimmten Grund, weshalb du die Klasse TThread nicht benützt?
Ich meine, man kann sich das Leben einfach oder schwer machen. |
Re: Proceduren Pointer übergeben
@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 :wink: |
Re: Proceduren Pointer übergeben
Eigentlich meinte ich, warum du den Funktionskopf nicht so realisierst und den alten Body beibehälst:
Delphi-Quellcode:
Da TThreadInfo für sich bereits ein Pointer ist, er wird lediglich benutzt als wäre er keiner.
procedure ThreadProcedure(Info : TThreadInfo); stdcall;
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). :wink: |
Re: Proceduren Pointer übergeben
TThreadInfo ist doch kein Pointer sondern eine Struktur :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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-2025 by Thomas Breitkreuz