我需要在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
要调用一个方法,可以使用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;
}
看看线程本身是如何做到的!我建议您从CPAN下载threads
,打开它并查看threads.xs
。您需要的部分是一个名为ithread_tid
的函数。