![]() |
TThread : Array als Parameter
Hi Leute,
ich möchte ein TThread-Object erstellen und diesem einen Array als Parameter übergeben, in dem ich den construcutor überschreibe:
Delphi-Quellcode:
type TPrintAntrag=class(TThread)
constructor create(s: array of string); protected procedure execute; override; private Fs: array[0..100] of string; end; constructor TPrintAntrag.create(s: array of string); begin Fs:=s; // FEHLER : "Incompatible types" Freeonterminate:=true; inherited create(false); end; procedure TPrintAntrag.execute; begin // mach irgendwas end; // Befüllen des Arrays und starten des Threads procedure TForm1.Button1Click(Sender: TObject); var meinArray : array[0..100] of string; i : integer; begin for i := 0 to 100 do meinArray[i] := intToStr(i); TPrintAntrag.create(meinArray); end; Problem: bei der Zuweisung Fs:=s; im constructor erhalte ich den Fehler "[Error] Unit1.pas(102): Incompatible types" Was mache ich verkehrt? Danke für eure Hilfe, gruß ben |
Re: TThread : Array als Parameter
Die Fehlermeldung ist schon sehr aussagekräftig: Du versuchst ein dynamisches Array einem Array mit konstanter Länge zuzuweisen.
|
Re: TThread : Array als Parameter
Hai bwolf,
ein Array of String ist ja nicht das selbe wie ein array[0..100] of String. Das eine ist dynamisch das andere hat eine feste grösse. Ich würde mir einen Typ für das Array anlegen und diesen verwenden. |
Re: TThread : Array als Parameter
Hi hi und erstmal danke für die wie immer sehr schnellen antworten.
Allerdings verstehe ich eure erklärung nicht ganz :oops:
Delphi-Quellcode:
...sind doch beides Arrays mit einer festen länge :gruebel:
Fs: array[0..100] of string;
meinArray : array[0..100] of string; |
Re: TThread : Array als Parameter
Aber den Type hat Du nicht im Constructor angegeben:
Delphi-Quellcode:
constructor create(s: array of string);
|
Re: TThread : Array als Parameter
Code:
Edit: Der Union drängelt sich immer vor :cry:
type TPrintAntrag=class(TThread)
constructor create(s: array of string); protected procedure execute; override; private [b] Fs: array[0..100] of string; [/b] end; constructor TPrintAntrag.create(s: [b]array of string[/b]); begin Fs:=s; // [color=red]FS ist Array[0.100] of String - s ist Array of String[/color] Freeonterminate:=true; inherited create(false); end; |
Re: TThread : Array als Parameter
ok, danke...
Also die einfachste Möglichkeit ist, ein Typ für das Array anzulegen, oder was gäbe es noch für möglichkeiten? |
Re: TThread : Array als Parameter
Ich würde in einem Thread nicht mit direkter Zuweisung arbeiten. Besser wäre der Übertrag des Quellarrays an das Array im Thread:
Delphi-Quellcode:
Und der inherited Aufruf MUSS zuerst kommen sonst knallts.
type TStringArray : Array of string;
... private Fs : TStringArray; ... constructor TPrintArray.Create(AInputArray : TStringArray); var i; begin inherited Create(True); // Suspended starten und FreeOnTerminate := True; // erst dann auf properties zugreifen SetLength(Fs, Length(AInputArray)) for i := Low(AInputArray) to high(AInputArray) do Fs[i] := AInputArray[i]; // Hier dann den Thread starten Resume; end; |
Re: TThread : Array als Parameter
Zitat:
|
Re: TThread : Array als Parameter
Zitat:
Eine wichtige Frage ist aber: Willst du das Array während dem Thread verändern? Wenn ja, wie sollen sich die Änderungen auswirken? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 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