unix – 为函数设置计时器
发布时间:2020-12-15 21:48:00 所属栏目:安全 来源:网络整理
导读:我已经定义了一个值列表:data:int list和function f:int – 单位和一段代码: for i = 0 to (List.length data) - 1 do let d = List.nth data i in f ddone 现在,我想设置f的最大运行时间.例如,如果f d超过某个时间最大值,则f d的执行停止,我们继续使用
我已经定义了一个值列表:data:int list和function f:int – >单位和一段代码:
for i = 0 to (List.length data) - 1 do let d = List.nth data i in f d done 现在,我想设置f的最大运行时间.例如,如果f d超过某个时间最大值,则f d的执行停止,我们继续使用下一个数据元素. 有谁知道怎么做? UPDATE1: 在评论之后,我想补充一点,将f应用于大部分数据元素最终会引发异常.这是正常的并被接受.所以代码看起来像: List.iter (fun d -> try (f d) with | e -> printf "%sn" (Printexc.to_string e)) data 解决方法
这是基于Jeffrey的回答,并通过一些修改来改善异常安全性:
exception Timeout let run_with_timeout timeout f x = let old_handler = Sys.signal Sys.sigalrm (Sys.Signal_handle (fun _ -> raise Timeout)) in let finish () = ignore (Unix.alarm 0); ignore (Sys.signal Sys.sigalrm old_handler) in try ignore (Unix.alarm timeout); ignore (f x); finish () with Timeout -> finish () | exn -> finish (); raise exn (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |