epoll_wait 无限等待要怎么退出呀?

sgch2010 2011-06-01 02:40:30
在做一个服务端的程序,接收线程大概是这样的:



while(!quit)
{
int nfds = epoll_wait (m_epoll_fd, m_events, MAX_EVENTS, -1);
...do some thing
}


假设我现在要停服务器,而且此时没有任何数据可读写,而epoll_wait又一直在等待,我怎么才能把这个线程退出呢?

...全文
1196 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nehc 2011-06-04
  • 打赏
  • 举报
回复
使用epoll的人貌似挺少的
这方面书也很少
不知道大牛们都是怎么掌握的.... 看源码?
sgch2010 2011-06-01
  • 打赏
  • 举报
回复
现在我是这样做的:设置信号

struct sigaction act;
act.sa_handler = epollProcExit;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if(sigaction(SIGUSR1,&act,0)!=0)
{
printf("sigaction fail \n");
return 0;
}
while (!pEpoll->m_quit)
{
nFds = ::epoll_wait(pEpoll->m_epfd, pEvents, pEpoll->m_maxLink,-1);
if(nFds == -1 && errno == EINTR)
{
printf("nFds == -1 && errno == EINTR \n");
break;
}


在另一个线程里 ,如果发现这个线程还没退出 ,则
raise(SIGUSR1)
sgch2010 2011-06-01
  • 打赏
  • 举报
回复
struct sigaction act;
act.sa_handler = epollProcExit;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if(sigaction(SIGUSR1,&act,0)!=0)
{
printf("sigaction fail \n");
return 0;
}
while (!pEpoll->m_quit)
{
nFds = ::epoll_wait(pEpoll->m_epfd, pEvents, pEpoll->m_maxLink,-1);
if(nFds == -1 && errno == EINTR)
{
printf("nFds == -1 && errno == EINTR \n");
break;
}

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧