![]() |
Variable an Thread übergeben... oder auch nicht!?
Hi,
hab ein kleines problem dabei eine variable an meinen thread zu übergeben. erstellt werden die threads so:
Delphi-Quellcode:
dann versuche ich die variable so rauszufinden:
for y := 0 to Data.SubStrings - 1 do begin
ThreadHandle := BeginThread(nil, 0, TFNThreadStartRoutine(@WorkerThreadFunc), @y, 0, ThreadID); ThreadData[y].ThreadHandle := ThreadHandle; ThreadData[y].ThreadID := y; end;
Delphi-Quellcode:
allerdings nimmt dann die variable nie den y wert an, den ich ihr übergeben habe :gruebel:
function WorkerThreadFunc(P: Pointer): Integer;
var MyID: integer; i: integer; test: TStringList; begin MyID := Integer(P^); ... genau so hat das aber früher (mit d7) funktioniert!? woran könnte das denn liegen...? *MFG* |
Re: Variable an Thread übergeben... oder auch nicht!?
Deklariere die Funktion mal als stdcall lass die Pointer-Casts weg.
Also so:
Delphi-Quellcode:
for y := 0 to Data.SubStrings - 1 do begin
ThreadHandle := BeginThread(nil, 0, @WorkerThreadFunc, y, 0, ThreadID); ThreadData[y].ThreadHandle := ThreadHandle; ThreadData[y].ThreadID := y; end;
Delphi-Quellcode:
function WorkerThreadFunc(P: Pointer): Integer; stdcall;
var MyID: integer; i: integer; test: TStringList; begin MyID := Integer(P); ... |
Re: Variable an Thread übergeben... oder auch nicht!?
mal ganz blöd gefragt.. wieso nimmste nicht die Tthread classe und übergibst die variablen mit einer überschriebenen Create function ?
|
Re: Variable an Thread übergeben... oder auch nicht!?
1. stdcall und beginthread gibt acess violation
2. das @ vor dem y kann man nicht weglassen, der parameter ist ein pointer! ansonsten: gleiches problem: wenn ich das @nicht weglasse aber das ^ kommt auch irgendne mistzahl dabei raus... |
Re: Variable an Thread übergeben... oder auch nicht!?
|
Re: Variable an Thread übergeben... oder auch nicht!?
immernoch alles nur nicht y :(
|
Re: Variable an Thread übergeben... oder auch nicht!?
Guck dir mein Threading Tutorial an. In den Demos zeige ich, wie man Parameter an Threads übergibt.
Bitte nicht CreateThread nutzen. Und die Thread-Funktion nicht als stdcall deklarieren.
Delphi-Quellcode:
Mal so auf die Schnelle ohne Compiler in die Tasten gehauen.
type
TThreadParams = record MyInt: Integer; MyString: String[255]; end; PThreadparams = ^TThreadParams; [..] function ThreadFunc(p: Pointer): Integer; var i: Integer; s: String; begin i := PThreadParams(p)^.MyInt; s := PThreadParams(p)^.MyString; [..] FreeMem(p, sizeof(TThreadParams)); end; [..] procedure Foobar; var ThreadParams: PThreadParams begin GetMem(ThreadParams, sizeof(TThreadParams)); ThreadParams.MyInt := 5; ThreadParams.MyString := 'Meflin ist doof.'; hThread := BeginThread(0, nil, @ThreadFunc, ThreadParams, ... ); if hThread <> 0 then begin ...; CloseThread(hThrerad); end; |
Re: Variable an Thread übergeben... oder auch nicht!?
@Meflin: Die Antwort auf dein Problem hat supermuckl schon geschrieben.
|
Re: Variable an Thread übergeben... oder auch nicht!?
Zitat:
steht hier in der windows api oder? |
Re: Variable an Thread übergeben... oder auch nicht!?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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