Perl 如何获取线程->;XS代码中的tid()值?

Perl 如何获取线程->;XS代码中的tid()值?,perl,xs,Perl,Xs,我需要在perl模块的*.XS部分的C函数中获取当前的perl线程id 在纯perl(*.pm部分)中,我只需执行以下操作: $id = threads->tid(); 但在XS中获得该值的推荐方法是什么 不幸的是,不要谈论在XS中处理线程 提前谢谢 -- kmx看看线程本身是如何做到的!我建议您从CPAN下载threads,将其解压缩并查看threads.xs。您需要的部分是一个名为ithread\u tid的函数,用于调用方法 谢谢这只在我的模块与“使用线程”一起加载(通过“使用My

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

在纯perl(*.pm部分)中,我只需执行以下操作:

$id = threads->tid();
但在XS中获得该值的推荐方法是什么

不幸的是,不要谈论在XS中处理线程

提前谢谢

--
kmx

看看线程本身是如何做到的!我建议您从CPAN下载
threads
,将其解压缩并查看
threads.xs
。您需要的部分是一个名为
ithread\u tid
的函数,用于调用方法


谢谢这只在我的模块与“使用线程”一起加载(通过“使用MyModule”)时起作用。如何在XS中检测未加载的线程(因此tid=0)?现在,您的代码出现了一个错误,例如:无法通过位于的包“threads”找到对象方法“tid”…我已经找到了,我需要G|u SCALAR | G|u EVALThere还应该有一个#ifndef USE_ITHREADS tid=0和一个通过Perl_load_module()可选的模块导入器。让.pm来处理。它返回线程的内部变量MY_CXT.context,我担心其他模块无法直接访问该变量
 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;
 }