向线程发送信号

时间:2015-03-19 08:30:20

标签: c signals

我正在实现一个使用线程的程序。我希望每个创建的线程都延迟一段时间。然后将信号发送到线程,处理程序应该打印一条消息。我的问题是向线程发送信号。怎么可能向每个创建的线程发送一个报警信号? 我可以使用pthread_kill(),但是如何指定闹钟(6)等的时间?

void *thread(void *parameter)
{
       //How to send a signal to a thread
}
void threadHandler(int sig)
{
    printf("hello from thread\n");
}

1 个答案:

答案 0 :(得分:0)

嗯,一种可能性是使用例如一个额外的线程来休眠一段时间。 usleep然后使用pthread_kill将要发送的信号发送到正确的线程。如果你是想要发送三个信号,经过1,3和5秒后,您可以使用此代码:

usleep(1*1000*1000);
pthread_kill(thread1, SIGALRM);
usleep(2*1000*1000);
pthread_kill(thread2, SIGALRM);
usleep(2*1000*1000);
pthread_kill(thread3, SIGALRM);

如果您使用的是Linux,则可以使用timerfd_create()创建一个计时器文件描述符,在给定的时间过后,可以从中读取数据。所以,如果你有例如10个线程,您可以使用特定于线程的超时创建10个timerfds,然后使用epoll_wait()循环(请参阅epoll_create和epoll_wait手册页),该循环侦听要从timerfds读取的数据并将信号发送到正确的线程是要读取的数据。

我认为没有任何现成的接口在经过特定的时间后将SIGALRM信号发送到特定的线程,但如果创建额外的线程是一个选项,你绝对可以使用它来模拟它usleep()或timerfd_create()/ epoll_wait()。