gpt4 book ai didi

C++ timer_create() 不创建新线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:57 25 4
gpt4 key购买 nike

我想要实现的是使用一个计时器,它每分钟都在同一时间启动新线程。到目前为止它完成了工作,但不幸的是,如果线程执行延迟超过 1 分钟,则不会创建新线程,而是 - 计时器等待直到前一个线程完成然后执行新线程,这不是我的目标。

我如何指示计时器每次都触发一个新线程,而无需等待上一个线程完成?

我用过的:

itimer.it_value.tv_nsec = 0;
itimer.it_interval.tv_sec = 60;
itimer.it_interval.tv_nsec = 0;

tt = time(NULL);
tt += 60; //next minute
tm_t = localtime(&tt);
tm_t->tm_sec = 0;
time_t vv = mktime(tm_t);
itimer.it_value.tv_sec = vv;

memset (&sigev, 0, sizeof (struct sigevent));
sigev.sigev_value.sival_int = 666;
sigev.sigev_notify = SIGEV_THREAD;
sigev.sigev_notify_attributes = NULL;
sigev.sigev_notify_function = threadFunction;

if (timer_create(CLOCK_REALTIME, &sigev, &timer) < 0){
exit (errno);
}
if (timer_settime(timer, TIMER_ABSTIME, &itimer, NULL) < 0){
exit (errno);
}

.....

最佳答案

如果您阅读 sigevent(7) manual page您会看到对于 SIGEV_THREAD 函数被称为“好像”它是一个新线程的启动函数。系统可能启动一个新线程,或者系统可能使用单线程来处理所有计时器事件(符合您的描述),或者完全不同的东西。

如果你想确保无条件地创建一个新线程,那么你应该创建一个创建线程的包装函数,并使 sigev_notify_function 指向该包装函数。

关于C++ timer_create() 不创建新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380805/

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