Новый поток при вызове timer_create () - PullRequest
0 голосов
/ 08 февраля 2011

Я исследую, как получить идентификатор потока, когда вызывается функция timer_create (). Я заметил, что каждый раз, когда вызывается timer_create (), создается новый поток (дочерний поток основного процесса). Я проверил это с помощью ps -eL | grep

Мне нужно получить тот же TID (идентификатор дочернего потока), который отображается ps -eL внутри моей программы, которая использует timer_create. Из кода ниже: Как я могу получить TID 18018 внутри моей программы?

Я исследовал все сообщения, и в каждом из них упоминается, что создается новая тема при вызове функции уведомления и без вызова timer_create ().

Я очень ценю вашу помощь!

Код:

SLGTRACER_DEFINE(testMain, "testMain");


timer_t audit_timer1;

void timeoutHandler(sigval_t info)
{
    slgInfo(testMain, "timeoutHandler invoked");

    slgInfo(testMain, "gettid() = %lu TESTMAIN", syscall(SYS_gettid));
    slgInfo(testMain, "getpid() = %d TESTMAIN", getpid());

}

int main(void)
{
    slgInfo(testMain, "testMain Invoked");


    struct sigevent evp1;
    evp1.sigev_notify = SIGEV_THREAD;
    evp1.sigev_value.sival_ptr = &audit_timer1;
    evp1.sigev_notify_function = timeoutHandler;
    evp1.sigev_notify_attributes = NULL;

    const int ERROR_BUFFER_SIZE = 50;


       slgInfo(testMain, "Before FIRST timer_create");
       sleep(30);


    // Create timer thread
    if (timer_create(CLOCK_REALTIME, &evp1, &audit_timer1) != 0)
    {
       // Character buffer for storing error message.
        char     errBuff[ERROR_BUFFER_SIZE];

        memset(errBuff, 0, ERROR_BUFFER_SIZE);

        slgError(testMain,
                    "timer_start create failed. Error = %s",
                    strerror_r(errno, errBuff, ERROR_BUFFER_SIZE));

        timer_delete(audit_timer1);
        bzero(&audit_timer1, sizeof(audit_timer1));
    }


       slgInfo(testMain, "After FIRST timer_create");
       sleep(30); 

    return 0;

}

bash-3.1# ps -eL|grep testM
16651 16651 pts/0    00:00:00 testMain
16651 18018 pts/0    00:00:00 testMain 
child thread with ID created by timer_create() = 18018

1 Ответ

0 голосов
/ 08 февраля 2011

Вопрос о том, существует ли поток до вызова обработчика тайм-аута, не указан. Конечно, совместимая реализация может отложить создание потока до истечения таймера. Существование числовых идентификаторов потоков, которые выглядят как pids, также является деталью реализации, которую вы не должны использовать.

Не могли бы вы объяснить, что вы пытаетесь достичь? Конечно, есть лучший способ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...