On 07.04.20 17:18, Petr Červenka wrote:
Hello Jan.
And if I don't want to totally remove the thread? Only to interrupt the waiting 
and react according to new events (like reconfiguring something or starting to 
wait on different resource).
Is there some pthread_create... or sched_... parameter or flag, that the task's 
system call can be interruptible?
And how to use the signals to interrupt it? Call of kill(task_pid, SIGINT) 
didn't helped.

Use __STD(pthread_kill) to target a specific thread.

But if you want to continue the thread after interruption, you may be looking for a RT channel. In that case, poll on the timerfd and a messaging channel like an mqueue or an iddp socket is more appropriate.

Jan

Petr
______________________________________________________________
 From "Jan Kiszka" <jan.kis...@siemens.com>

On 07.04.20 15:41, Petr Červenka via Xenomai wrote:
  > Hello everyone.
  > I there a rt_task_unblock() Xenomai POSIX skin alternative?
  > I created an example of periodic POSIX task, similar to the latency example 
but with very long period. When I receive a INT signal I set the end flag and I 
would like to unblock a task that waits on read(timerfd). But all my attempts led 
to standard wait timeout or worse.
Try pthread_cancel(). If you need to run some cleanup code in the target
  thread, use pthread_cleanup_push. None of that would be with real-time
  qualities, though. But I assume that the cleanup is not a time-critical
  path, is it?
Sending a Linux signal would be another way to interrupt the target task. Jan --
  Siemens AG, Corporate Technology, CT RDA IOT SES-DE
  Corporate Competence Center Embedded Linux


--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

Reply via email to