关于poll()的唤醒问题
本帖最后由 allen_4167 于 2012-11-21 16:19:22 编辑 我在应用中poll()监听了一组fd的读变化,现在需要在fd集没有可读数据的情况下,在另一个线程中随时把这个阻塞状态中的poll()唤醒,请问有办法么??
一般这种情况下的程序应该如何设计?
谢谢~
[最优解释]
#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;
}