ros*_*mcm 5 delphi file-io timeout delphi-2006
我有一个用Delphi 2006编写的应用程序,它定期从位于网络其他位置的磁盘文件(100Mb以太网)读取.偶尔通过网络读取需要很长时间(如20秒)并且应用程序冻结,因为读取是从主线程中的空闲处理程序完成的.
好的,我可以将读取操作放入它自己的线程中,但我想知道的是,是否可以为文件操作指定超时,以便您可以放弃并去做其他事情,或报告事实上,读取时间早于20秒后出现了问题.
function ReadWithTimeout (var Buffer ;
N : integer ;
Timeout : integer) : boolean ;
begin
Result := false
try
SetReadTimeout (Timeout) ; // <==========================???
FileStream.Read (Buffer, N) ;
Result := true ;
except
...
end ;
end ;
Run Code Online (Sandbox Code Playgroud)
通过在调用时包含标志来打开文件以进行异步访问.在您打电话时传入记录,如果读取没有立即完成,该功能将提前返回.您可以通过调用存储在结构中的事件来控制等待读取完成的时间.你甚至可以用来等待; 然后,一旦读取完成或消息到达,您就会收到通知,以先到者为准,因此您的程序根本不需要挂起.处理完消息后,您可以再次检查I/O是否已完成,恢复等待或通过调用放弃I/OFile_Flag_OverlappedCreateFileTOverlappedReadFileWaitForSingleObjectTOverlappedMsgWaitForMultipleObjectsGetOverlappedResultCancelIo.请务必仔细阅读所有这些功能的文档; 异步I/O并非易事.