如何在XS代码中获取threads->tid()值?



我需要在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的函数。

相关内容

  • 没有找到相关文章

最新更新