나는이 코드 조각이 나를 미치게합니다.연결이 끊긴 드라이브에 액세스하는 동안 프로그램이 30 초 동 안 고정됩니다.
FUNCTION DiskInDrive(CONST DriveNumber: Byte): BOOLEAN;
VAR ErrorMode : Word;
BEGIN
RESULT:= FALSE;
ErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
TRY
if DiskSize(DriveNumber) <> -1 { %%%% THIS IS VERY SLOW IF THE DISK IS NOT IN DRIVE !!!!!! }
THEN RESULT:= TRUE;
FINALLY
SetErrorMode(ErrorMode);
END;
END;
디스크를 사용할 준비가되었는지 (그리고 제공된 드라이브 문자가 유효한 디스크에 해당하는지) 확인합니다. 문제는 연결이 끊어진 네트워크 드라이브 (네트워크 폴더가 드라이브로 매핑 됨)에 액세스하려고하면 약 10-30 초 동결됩니다.
코드는 내가 만든 구성 요소의 생성자에 있습니다.
오래 기다리지 않고 드라이브를 검사하려면 어떻게해야합니까?
수 없습니다. 이는 로컬 및 네트워크 자원 모두에 적용됩니다. 이 질문에 대한 답변을 참조하십시오 : http://stackoverflow.com/questions/1438923/faster-directoryexists-function 별도의 스레드에서이 문제를 해결하십시오 (하나 이상의 장치를 점검하는 경우 스레드 당 하나의 장치) –