我需要在perl模块的* .XS部分内的C函数中获取当前的perl线程id。
在纯perl(* .pm部分)中,我只会这样做:
$id = threads->tid();
但是在XS中获取此值的推荐方法是什么?
不幸的是http://perldoc.perl.org/perlthrtut.html和http://perldoc.perl.org/threads.html没有谈论在XS中处理线程。
提前致谢
- KMX
答案 0 :(得分:2)
要调用方法,请使用call_method
。
UV get_tid() {
dSP;
UV tid;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv("threads", 0)));
PUTBACK;
count = call_method("tid", G_SCALAR|G_EVAL);
SPAGAIN;
if (SvTRUE(ERRSV) || count != 1)
tid = 0;
else
tid = (UV)POPi;
PUTBACK;
FREETMPS;
LEAVE;
return tid;
}
答案 1 :(得分:0)
了解线程本身是如何做到的!我建议您从CPAN下载threads
,解压缩并查看threads.xs
。您需要的部分是一个名为ithread_tid
的函数。