gpt4 book ai didi

c++ - 调用timer_create()的新线程

转载 作者:行者123 更新时间:2023-11-30 18:07:09 25 4
gpt4 key购买 nike

我正在研究如何在调用函数timer_create()时获取线程ID。我观察到每次调用timer_create()时,都会创建一个新线程(主进程的子线程)。我用 ps -eL|grep 验证了这一点

我需要在使用timer_create的程序中获取ps -eL显示的相同TID(子线程ID)。从下面的代码:如何在我的程序中获取 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

最佳答案

在调用超时处理程序之前线程是否存在是未指定的。当然,一致的实现可以推迟线程的创建,直到计时器到期。看起来像 pid 的数字线程 id 的存在也是一个实现细节,您不应该使用它。

您能解释一下您想要实现的目标吗?当然有更好的方法......

关于c++ - 调用timer_create()的新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com