日期:2014-05-16 浏览次数:20950 次
#include <unistd.h>
#include <poll.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
void sigusr1(int sig)
{
}
void *poller(void *arg)
{
int ret;
struct sigaction act;
struct pollfd fds[1];
act.sa_handler = sigusr1;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
#ifdef SA_INTERRUPT
act.sa_flags
------其他解决方案--------------------
应该使用poll的timeout参数,
如果真由这种需要,可以用信号中断。
------其他解决方案--------------------
我的情况不能用timeout,请问如何用信号中断?
给poll()所在的线程发信号?然后怎样使poll()返回呢??难道在信号处理函数中直接把整个线程退出?
请mymtom指点~
------其他解决方案--------------------
= SA_INTERRUPT;
#endif
sigaction(SIGUSR1, &act, NULL);
fds[0].fd = STDIN_FILENO;
fds[0].events = POLLIN;
fds[0].revents = 0;
ret = poll(fds, 1, -1);
if (ret < 0)
perror("poll");
return NULL;
}
int main(int argc, char *argv[])
{
pthread_t tid;
pthread_create(&tid, NULL, poller, NULL);
sleep(5);
pthread_kill(tid, SIGUSR1);
pthread_join(tid, NULL);
return 0;
}