如何每秒刷新终端并获得用户输入?

时间:2016-01-23 17:55:24

标签: c++ ncurses

我正在尝试用c ++实现htop(系统单调)。

所以我使用ncurses刷新终端。

我需要每5秒获取一次新信息,例如,我使用循环来实现这一点。

 while (42)
  {
      key = std::cin.get();
      std::cout << key;
      this->gereEvent(key);
      std::cout << i<< std::endl;
      if (i == 500000000)
      {
          std::cout << "test"<< std::endl;
  //      fputs(tgetstr((char *)"cl", 0), stdout);
        this->refresh();
        i = 0;
      }
      i++;
  }

但问题是cin.get()停止循环.. 我不能做一个线程eitheir因为std :: thread需要c ++ 11。

您知道我该怎么做吗?

1 个答案:

答案 0 :(得分:3)

您需要轮询键盘事件。这可以在getch的ncurses中完成。

#include<stdio.h>
#include<curses.h>
#include<unistd.h>

int main ()
{
    int i=0;

    initscr();     //in ncurses
    timeout(0);
    while(!i)
    {
        usleep(1);
        i=getch();
        printw("%d ",i);
        if(i>0)
            i=1;
        else
            i=0;
    }
    endwin();
    printf("\nhitkb end\n");
    return 0;
}

此示例来自http://cc.byexamples.com/2007/04/08/non-blocking-user-input-in-loop-without-ncurses/comment-page-1/#comment-2100