我需要在 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
我需要在 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;
}
看看线程本身是如何做到的!我建议您threads
从 CPAN 下载,解压缩并查看threads.xs
. 您需要的部分是一个名为ithread_tid
.