Мне нужно получить текущий идентификатор потока perl в функции C внутри * .XS части модуля perl.
В чистом perl (* .pm часть) я бы просто сделал:
$id = threads->tid();
Но какой рекомендуемый способ получить это значение в XS?
К сожалению http://perldoc.perl.org/perlthrtut.html и http://perldoc.perl.org/threads.html не говорят о работе с потоками в XS.
Заранее спасибо
- кмх
Для вызова метода используется call_method.
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.
threads
threads.xs
ithread_tid