作者Wush978 (拒看低质媒体)
看板R_Language
标题[分享] 在 C/C++ 中回应使用者的中断
时间Thu Jul 26 13:47:53 2018
[关键字]: R, C, C++, 中断
最近在爬code的时候看到有些套件会在C loop 中插入一段检查 user interept 的程式码
以 dbscan 套件为例子,里面有:
for (int i = 0;i < nrow; i++) {
if (!(i % 100)) Rcpp::checkUserInterrupt();
// ...
}
查了一下 Rcpp 的文件,
http://dirk.eddelbuettel.com/code/rcpp/Rcpp-attributes.pdf
里面提到这个函数会适当的呼叫C++物件的destructors,所以可以在C++中安全使用。
ps. 它会丢出一个exception: Rcpp::internal::InterruptedException
R原生的C API有 R_CheckUserInterrupt,但是如果使用它,则会直接跳回R
C++的destructors不会被呼叫,会导致memory leak
底层的细节可以参考:
http://r.789695.n4.nabble.com/Interrupting-C-code-execution-td3472972.html
有大大解释得很清楚
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.169.113.197
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1532584080.A.946.html
1F:→ Wush978: 结果我自己写了以後,虽然可以中断,但是还是会有 07/26 22:36
2F:→ Wush978: memory leak 的状况... 总之尽量避免使用吧 07/26 22:36
我把细节丢到 Rcpp-devel 了:
http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2018-July/010057.html
这里也做个纪录
※ 编辑: Wush978 (118.169.113.197), 07/26/2018 23:34:25