[分享] 在 C/C++ 中回应使用者的中断

楼主: Wush978 (拒看低质媒体)   2018-07-26 13:47:53
[关键字]: 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
有大大解释得很清楚
楼主: Wush978 (拒看低质媒体)   2018-07-26 22:36:00
结果我自己写了以后,虽然可以中断,但是还是会有memory leak 的状况... 总之尽量避免使用吧

Links booklink

Contact Us: admin [ a t ] ucptt.com