Hallo.
In einem Thread wird eine Funktion (USBAsyncRead) aufgerufen, welche als Argument einen var-Parameter benötigt. In diesen var-Parameter werden die Daten geschrieben, welche von dieser Funktion generiert werden.
Nun suche ich einen Weg diese Daten nach Beendigung des Threads, außerhalb des Threads weiterverwenden zu können. Daher habe ich versucht meinem Thread einen var-Parameter (tData) zu übergeben, welchen ich dann an die oben erwähnte Funktion weitergebe.
Das sieht so aus:
Delphi-Quellcode:
type
TBulkCommandThread = class(TThread)
private
...
...
Data : TDataFrame;
...
...
protected
public
end;
TBulkReceiveCommandThread = class(TBulkCommandThread)
private
...
....
protected
procedure Execute; override;
public
constructor create(tPipeHandle : USB_PIPE_HANDLE;
var tData : TDataFrame;
tDSPMessage : Pointer;
tStatus : Pointer);
end;
constructor TBulkReceiveCommandThread.create(tPipeHandle : USB_PIPE_HANDLE;
var tData : TDataFrame;
tDSPMessage : Pointer;
tStatus : Pointer);
begin
PipeHandle := tPipeHandle;
Data := tData;
DSPMessage := tDSPMessage;
Status := tStatus;
inherited create(False);
end;
procedure TBulkReceiveCommandThread.Execute();
begin
...
...
// receive Data
bRet := USBReadAsync(PipeHandle,
Data,
USBcb.nDATA,
FenumProcInst);
...
...
end;
Die Daten liegen nun in Data, sind aber außerhalb des Threads nicht verfügbar. Erscheint mir auch logisch, weil Data wohl nicht mehr das Selbe ist wie der wirkliche var-Parameter tData.
Wie kann ich mein Problem lösen?
Habe auch schon einen Lösungsansatz mit Zeigern probiert, aber ein Problem ist schon mal, dass USBAsyncRead einen var-Parameter und keinen Zeiger benötig. Ich weiß zwar, dass ein var-Parameter intern als Zeiger behandelt wird, aber wenn ich einen Zeiger übergebe, ändert sich auf einmal der Inhalt des Zeigers und nicht die Speicherstelle auf der er zeigt. Scheint mir also auch nicht der richtige Ansatz zu sein.
Habe auch mit Hilfe der SuFu keine Lösung finden können.
Wer weiß Rat?
Vielen Dank.