То, что я пытаюсь достичь, - использовать таймер, который запускает новый поток каждую минуту в одно и то же время. До сих пор это выполнялось, но, к сожалению, если выполнение потока задерживается более 1 минуты, то новый поток НЕ создается, а вместо этого - таймер ждет, пока предыдущий поток не закончится, а затем выполнит новый, что не является моей целью.C++ timer_create() не создает новый поток
Как я могу дать указание таймеру запускать новый поток каждый раз, не дожидаясь, пока он закончит?
Что я использовал:
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);
}
.....
Что вы подразумеваете под «функцией обертки»? –
@IvailoTanusheff Функция, которую вы используете для 'sigev_notify_function', является простой функцией, которая создает поток, используя функцию * actual * thread (' threadFunction' в вашем случае). Это функция, которая «обертывает» вашу фактическую функцию. –