2010-05-24 11 views
2

프로그램에서 스레드 ("작업 스레드")에 걸쳐 있습니다. 헤라 나는 일부 파일을 데이터베이스에 복사하고 결국에는 다른 파일이나 디렉토리를 삭제합니다. 모든 것이 잘 작동합니다. 이제 문제는 삭제 작업을 다른 스레드로 옮기기로 결정한 것입니다. 따라서 작업 스레드는 파일이나 디렉토리를 복사하고 데이터베이스에 쓰고 다른 파일을 삭제해야 할 경우이 스레드가 다른 스레드에 스팬하고 두 번째 스레드가 필요한 파일이나 디렉토리를 삭제합니다.다른 스레드에서 액세스가 거부되었습니다.

문제는 작업 스레드에서 작업이 완료되었을 때 100 % 작업이 삭제 된 것입니다. 이제는 보조 스레드에서 동일한 작업이 수행 될 때 가끔에 "액세스가 거부되었습니다"라는 오류 메시지가 표시 될 수 있습니다. 삭제됨 그리고 아니요, 작업중인 스레드는 현재 파일과 디렉토리에이 순간에 삭제하지 않기로 동의합니다.

때로는 (항상 그런 것은 아니지만) 주 스레드가 일부 사용자를 가장하려고하므로 필요할 경우 삭제 스레드가 파일을 삭제하는 데 필요한 권한을 부여하기 위해 가장 아래에서 실행되므로 문제가되지 않아야합니다.

왜 이런 일이 일어날 수 있는지 실마리가 있습니까?

+2

바이러스 백신을 실행하고 있습니까? 때로는 파일을 추가, 변경 및 삭제할 때 방해가됩니다. 내 전체 개발 폴더 트리를 안티 바이러스 소프트웨어의 신뢰할 수있는 영역에 추가하는 경향이 있으며 문제를 완화하는 것으로 보입니다. –

+0

가장은 현재 스레드 전용이므로 주에서 가장하는 경우 작업자 스레드에서 가장하지 않습니다. – Remko

+0

그래, 그게 내가 말한 이유는 : 필요하다면, 삭제 스레드는 또한 가장 밑에서 실행된다. 즉, 다시 사칭한다. – Lobuno

답변

1

정말 관련이 없다고 생각합니다.하지만 Window Prefetch를 비활성화하십시오. 프리 페치 (Prefetch) 잠금 파일로 인해 많은 문제가 발생했지만 응용 프로그램을 시작할 때 발생했습니다. 내가 아는 한 Prefetch는 시스템이 부팅 될 때 및 응용 프로그램이 시작될 때 (현재 구성 값에 따라) 파일을 읽어야 만하지만 새 스레드를 만들 때 파일을 읽는 경우도 있습니다.

관련 문제