Einzelnen Beitrag anzeigen

Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

var-Parameter mit Thread nutzen

  Alt 12. Feb 2008, 14:05
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.
  Mit Zitat antworten Zitat