当前位置:  技术问答>linux和unix

关于SIGALRM中断函数调用问题。

    来源: 互联网  发布时间:2016-11-13

    本文导语:  本帖最后由 yanjinbin0 于 2011-03-08 20:34:44 编辑 关键代码如下: 1. 一个定时器信号处理函数 void init_sigaction(void) {      struct sigaction act; act.sa_handler = HandleTimer;  /*该函数如void HandleTimer(int signo){int i = 0;i = 1;}*/ ...

本帖最后由 yanjinbin0 于 2011-03-08 20:34:44 编辑
关键代码如下:
1.
一个定时器信号处理函数
void init_sigaction(void)
{
     struct sigaction act;
act.sa_handler = HandleTimer;  /*该函数如void HandleTimer(int signo){int i = 0;i = 1;}*/
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGALRM,&act,NULL);
}
2.
启动定时器函数
void init_time(void)
{
struct itimerval value;

value.it_value.tv_sec = 0;
value.it_value.tv_usec = 50*1000;  //50*1000,数值1000*1000,500*1000都可以正常,但换成50就不行。
value.it_interval = value.it_value;
setitimer(ITIMER_REAL, &value, NULL);
}
3.main()主进程函数
main()
{
   init_sigaction();/*该定时器是一定要的*/
   init_time();
   /*省略N行代码*/
   rtv = connect(sock, (struct sockaddr *)s_addr, sizeof(struct sockaddr_in));
   if(rtv == 0){
       return sock;
   }
   if(errno != EINTR){   //如果被信号中断则需要等待,如不是则出错返回
       close(sock);
       return(-1);  
   }else{
     do{
        FD_ZERO (&wfd);
     FD_ZERO(&rset);
           FD_SET(sock,&rset);
     FD_SET (sock, &wfd);
     stv = select(sock + 1,&wfd,  NULL, NULL,NULL);  //永久等待
     if( stv > 0){                                    //连接成功
          printf("connect sourcessn");
          return sock;
     }else if(stv == 0){                           //超时
           printf("connect errno time out n");
          close(sock);
          return -1;
      }
   FD_CLR(sock, &wfd);
   printf("connect errno == EINTRn");
     }while(stv 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • unix环境高级编程 第十章十九节sleep函数实现为什么要先阻塞SIGALRM?
  • 多线程socket程序莫名其妙接收到SIGALRM信号问题。
  • setitimer(ITIMER_REAL...以系统实时时间计算超时发出SIGALRM信号?
  • signal(SIGALRM,...)为什么执行不起来?
  • 如何捕捉多次的SIGALRM信号
  • 请问:向进程中的pause()发送一个SIGALRM信号,线程就直接退出了,为什么啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3