Zitat von
Sharky:
Allerdings werde ich mir auch noch mal ansehen wie das ganze in einem Thread aussehen würde.
ich würde aber auf jeden Fall nicht die blockierende Variante verwenden, sonder weiterhin mit Events arbeiten... ansonsten bist Du auf unschöne Sachen wie
TerminateThread(fThread.Handle, 0);
angewiesen...
also eher im Sinne von:
Delphi-Quellcode:
Procedure TAddrChangeThread.Execute();
Var
H : THandle;
Overlapped : Overlapped;
R : DWORD;
Begin
Overlapped.hEvent:=CreateEvent(Nil,False,False,Nil);
Try
While not Terminated Do Begin
R:=NotifyAddrChange(H,Overlapped);
If not ((R = NO_ERROR) or (R = ERROR_IO_PENDING)) Then RaiseLastOSError();
While True Do Begin
If Terminated Then Exit;
Case WaitForSingleObject(Overlapped.hEvent,500) Of
WAIT_TIMEOUT : Continue;
WAIT_OBJECT_0 : Break;
Else Exit;
end;
end;
// Mach was...
Synchronize(....);
end;
Finally
CloseHandle(Overlapped.hEvent);
end;
end;