일부 파일을 처리하는 여러 서비스가 있습니다. 처리하는 동안 각 서비스는 파일에 독점적으로 액세스해야합니다. 이 같은 글로벌 일부 임시 파일을 사용 뮤텍스, 무언가를 만들어 얼마 전에이 문제를 해결 :여러 응용 프로그램 동기화
function AppLocked: boolean;
begin
result := FileExists(GetTempDir + '__MUTEX__' + LockExt);
end;
procedure AppLock;
var
F: TextFile;
begin
if FileExists(GetTempDir + '__MUTEX__' + LockExt) then
exit
else
try
AssignFile(F, GetTempDir + '__MUTEX__' + LockExt);
Rewrite(F);
Writeln(F, DateTimeToStr(Now));
CloseFile(F);
except
end;
end;
procedure AppUnLock;
begin
if FileExists(GetTempDir + '__MUTEX__' + LockExt) then
SysUtils.DeleteFile(GetTempDir + '__MUTEX__' + LockExt);
end;
이 꽤 잘 작동하고, 나는 작동 뭔가를 해결하고 싶지 않아,하지만 난 그냥 궁금 더 나은 해결책이 있습니까?
어떤 Delphi 버전을 사용하고 있습니까? 적어도 D2007을 통해 Delphi 버전에 포함 된 프로세스 간 통신 (Demos \ DelphiWin32 \ VCLWin32 \ IPCDemos 폴더에 있음)의 꽤 좋은 예가 있습니다. 최신 버전에는 Samples \ Delphi \ RTL \ SimpleShareMem 데모가 있습니다. –
저는 Delphi XE를 사용하고 있습니다. 나는 그 예를 발견했고 지금 당장 그것을 연구하고있다. 감사. –
파일을 연 프로세스가 파일을 닫지 않는 한 '다시 쓰기'가 이미 다른 프로세스에서 실패합니다. –