轮询利用阻止

时间:2014-05-16 21:37:44

标签: c

如何阻止poll,以便仅在我们按下键盘按钮时才会激活它。

因为没有事件就一个人继续。

我已经阅读了所有手册。

 while(i<5){  
      struct pollfd fds[2];
    int timeout_msecs = 500;
    int ret;
      fds[0].fd=STDIN_FILENO;
      fds[0].events=POLLIN | POLLWRBAND | POLLHUP;

    ret = poll(fds, 2, -1);
    snprintf(buffer, 12,"%d",ret);

    //write_raw(7,i,"z",1);

              if(ret > 0) {
              //  write_raw(3,i,"a",1);

                 if (fds[0].revents & POLLIN) {
                   // write_raw(4,i,"b",1);
        //      write_raw(3,1,buffer,1);

        posx=posx-1;
              write_raw(posy,posx,"_|_",3);

              sleep(5);
              fds[0].events = POLLHUP;
                 }
                  if(fds[0].revents & POLLHUP){

              write_raw(4,i,"a",1);

                 }
              }

             fds[0].events=NULL; 
              i++;
    }

1 个答案:

答案 0 :(得分:0)

您只有1个要监视事件的文件描述符,但是你告诉poll()你有2.你需要做

 ret = poll(fds, 1, -1);

当您可以将紧急数据写入标准输入时,您无法获取事件(无论这意味着什么,所以

  fds[0].events=POLLIN | POLLHUP;

这没有任何意义

 fds[0].events=NULL; 

删除该行。

您的下一个问题是您注册了阅读活动。但你从来没有读过关于stdin的任何输入。如果有可用数据,您将每次都获得一个事件,直到您实际读取所有可用数据。

您的问题表明您希望获得键盘事件,您可以通过读取数据获得该事件,但您的代码主要调用write_raw()函数,这听起来像是写入数据而不是读取数据。