Jetzt ist mir klar geworden wie das funktioniert und bin schon mal ein ganzes Stück schlauer. Vielen Dank.
Über die Notwendigkeit des Synchornisierens und auch über den Grund dafür bin ich mir bewusst. Allerdings habe ich so etwas bis jetzt noch nie gemacht und weiß nicht wirklich wie man das macht. Macht man es in diesem Fall auch mit der TThread.Synchronize Methode?
Zitat von
sirius:
Delphi-Quellcode:
procedure TBulkReceiveCommandThread.Execute();
//hier würde ich zum synchronisieren den Inhalt von TDataframe kurz zwischensepichern
//var tempData=TDataFrame;
begin
...
...
// receive Data
tempData:=Data^; //ich weiß nicht, ob du Data vorbelegen musst (evtl. synchronisieren)
bRet := USBReadAsync(PipeHandle,
tempData,
USBcb.nDATA,
FenumProcInst);
Data^:=tempData; //Diese Zeile muss synchronisiert werden
...
...
end;
Wie genau kann ich dies Zeile synchronisieren? Mir ist schon klar, dass tempData erst dann nach Data^ zugewiesen werden darf, wenn USBReadAsync das Schreiben in tempData beendet hat. Aber wie ist da der richtige Ansatz?