Delphi-Quellcode:
var
DataMutex : THandle;
//Mutex für die Zugriffssteuerung auf den Datenpuffer
initialization
DataMutex := CreateMutex(
nil,false,
nil);
//im Thread oder in der GUI dann z.B.:
try
if WaitForSingleObject(DataMutex,100) = WAIT_OBJECT_0
then
begin
//Datenübergabe
end
else
begin
WriteError('
DataMutex','
hier ist was schief gelaufen');
end;
finally
ReleaseMutex(DataMutex);
end;
Das benutzen dann alle Routinen, die auf den Speicher zugreifen wollen, hier sehr schnelle Vorgänge. Deshalb ist auch schon bei 100ms ein timeout. Bei Dir würde so ein Wert dann eher bei 10000 liegen. Aber Du kannst das explizit festlegen (auch mit INFINITE), und Du selbst fasst den geschützen Bereich an und lässt ihn wieder los. Zusätzlich kann man damit auch mehrere Ebenen verschachteln.
Grüße, Messie