У меня есть несколько практических вопросов о settimer () и SIGALRM и о том, как они работают.
Допустим, у меня есть несколько созданных тем: (EDITED)
#define _POSIX_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <signal.h>
pthread_mutex_t lock;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
void timer_handler (int signum)
{
printf ("\n[WAITING LINE] All our assistants are busy at the moment,we apologize. Please wait on the line\n");
}
void* threadFunc(void* arg){
struct itimerval timer;
if (signal(SIGALRM, (void (*)(int)) timer_handler) == SIG_ERR) {
perror("Unable to catch SIGALRM");
exit(1);
}
timer.it_value.tv_sec =1;
timer.it_value.tv_usec = 0;
while(mycond){
if(setitimer (ITIMER_REAL, &timer, NULL)){
perror("error calling setitimer()");
exit(1);
}
pthread_cond_wait(&cond1,&lock);
//doing other things that take significant time
}
}
int main(){
//initializing mutex
....
//creating the threads
....
//waiting the threads to join
....
return 0;
}
Я не получаю сообщение, которое должно было отображаться каждые 20 мсек.В примере, которому я следовал, некоторое время (1) было реализовано после settimer, но
Я не могу этого сделать, потому что я хочу, чтобы это сообщение отображалось, пока мой поток ожидает сигнала условия.На самом деле не имеет значения, что реализовано в остальном коде, давайте предположим, что для завершения и отправки условия требуется гораздо больше времени, чем 20 мс.
Что я должен делать, чтобы получать сообщение timer_handler каждые 20 мс, пока выполняется условиееще не сигнализируется?
Я новичок в использовании как условных переменных, так и settimer (), поэтому любая помощь в их понимании и устранении любых недоразумений приветствуется.