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

时间:2014-10-15 10:56:10

标签: c++ multithreading timer

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

我怎样才能指示计时器每次都开始一个新的线程,而不是等到之前完成?

我用过的东西:

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);
}

.....

1 个答案:

答案 0 :(得分:1)

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

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