Du könntest ja auf eine andere/größere Queue/Liste ausweichen?
Delphi-Quellcode:
uses SyncObjs, Generics.Collections;
var
QueueCS: TCriticalSection;
Queue: TQueue<THIDFeedback>;
var
Temp: THIDFeedback;
begin
// hid-thread
SetLength(Temp.Data, Received);
MoveMemory(@Temp.Data[0], Buffer, Received);
Temp.HidCount := HidCount;
QueueCS.Enter;
try
Queue.Enqueue(Temp);
finally
QueueCS.Leave;
end;
// mainthread
QueueCS.Enter;
try
Found := Queue.Count > 0;
if Found then Temp := Queue.Dequeue;
finally
QueueCS.Leave;
end;
if Found then
begin
// temp auswerten
end;
Statt Record, CS und gen. Queue könnte man auch TThreadList mit Objekten nutzen.