Hi ,
I am writing my applications based on the examples that come with the Master
installation.
The cyclic_task() is executed every time on reception of a timer signal by
calling the pause() blocking function. This works if using just one thread.
When using multi-threading, such that the function which calls the
cyclic_task() is running in a separate detached thread from the main thread,
the pause function blocks forever and a signal is never received as below.
Does anyone have a solution for this ?
Also, I tried to use usleep() and sleep() instead of signals to wait for the
right time to call the cyclic_task(), but the timing is not right. It seems
that the sleeps can not wait longer than 10ms.
Thanks in advance for any help.
/****************************************************************************/
void signal_handler(int signum){ switch (signum) { case SIGALRM:
sig_alarms++; break; }}
/****************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////This
function is assigned to a std::thread and detached
void Ethercat::threadFunc(){ struct sigaction sa; struct itimerval tv;
sa.sa_handler = signal_handler; sigemptyset(&sa.sa_mask); sa.sa_flags
= 0; if (sigaction(SIGALRM, &sa, 0)) { fprintf(stderr, "Failed to
install signal handler!!\n"); }
printf("Starting timer...\n"); tv.it_interval.tv_sec = 0;
tv.it_interval.tv_usec = 1000000 / (FREQUENCY * 10); tv.it_value.tv_sec = 0;
tv.it_value.tv_usec = 1000000 / ( FREQUENCY * 10); if
(setitimer(ITIMER_REAL, &tv, NULL)) { fprintf(stderr, "Failed to
start timer: %s\n", strerror(errno)); }
printf("Starting cyclical task.\n");
while (1) {
#if 0 struct timeval t; gettimeofday(&t, NULL);
printf("%u.%06u\n", t.tv_sec, t.tv_usec);#endif pause(); while
(sig_alarms != user_alarms) { cyclic_task();
user_alarms++; }
}
}
/****************************************************************************/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////_______________________________________________
etherlab-users mailing list
[email protected]
http://lists.etherlab.org/mailman/listinfo/etherlab-users