Я исследую, как получить идентификатор потока, когда вызывается функция 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