Как получить значение threads-> tid () в коде XS? - PullRequest
1 голос
/ 27 января 2012

Мне нужно получить текущий идентификатор потока perl в функции C внутри * .XS части модуля perl.

В чистом perl (* .pm часть) я бы просто сделал:

$id = threads->tid();

Но какой рекомендуемый способ получить это значение в XS?

К сожалению http://perldoc.perl.org/perlthrtut.html и http://perldoc.perl.org/threads.html не говорят о работе с потоками в XS.

Заранее спасибо

- кмх

Ответы [ 2 ]

2 голосов
/ 27 января 2012

Для вызова метода используется 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;
 }
0 голосов
/ 27 января 2012

Посмотрите, как это делает сама тема!Я предлагаю вам скачать threads с CPAN, распаковать его и взглянуть на threads.xs.Часть, которая вам нужна, это функция с именем ithread_tid.

...