Perl 如何获取线程->;XS代码中的tid()值?
我需要在perl模块的*.XS部分的C函数中获取当前的perl线程id 在纯perl(*.pm部分)中,我只需执行以下操作: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
$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;
}