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

时间:2012-01-27 19:01:35

标签: perl xs

我需要在perl模块的* .XS部分内的C函数中获取当前的perl线程id。

在纯perl(* .pm部分)中,我只会这样做:

$id = threads->tid();

但是在XS中获取此值的推荐方法是什么?

不幸的是http://perldoc.perl.org/perlthrtut.htmlhttp://perldoc.perl.org/threads.html没有谈论在XS中处理线程。

提前致谢

- KMX

2 个答案:

答案 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的函数。