簡體   English   中英

libncurses:非阻塞STDIN +在套接字上選擇

[英]libncurses: non-blocking STDIN + select on socket

我正在使用select從套接字和STDIN進行非阻塞讀取。 用偽代碼:

loop
  readable = select(socket, STDIN)
  foreach input in readable
    if input == STDIN
      handle_keyboard_input(read(STDIN))
    else
      handle_socket_input(read(socket))

上面的作品很棒。 但是現在我想開始使用libncurses來構建更復雜的基於文本的UI。 (我可能有兩個窗口:一個大的日志窗口和一個較小的提示窗口。)

大概,套接字處理將保持不變。 但是我不清楚libncurses如何將STDIN抽象化。 在libncurses窗口中進行非阻塞讀取的正確習慣是什么?

實際上,這是在Ruby中進行的,但是我只是在C API周圍使用了薄包裝紙,因此我覺得這被更恰當地標記為C問題。

基本上, ncurses僅在調用諸如getch類的輸入函數時才從其輸入流中讀取。 因此,在某種程度上, ncurses不會抽象任何東西。 它所做的就是將兩個文件描述符(每個用於輸入,一個用於輸出)與每個SCREEN 有關詳細信息,請參見man newterm

如果調用nodelay或使用timeout/wtimeout將超時設置為0,則如果相應窗口沒有待處理的輸入, getch將立即返回錯誤。 基本上,這就是編寫異步輸入處理所需的全部內容(就ncurses而言。)如果要使用select循環,則需要處理調度后台任務的機制,等等ncurses具有對multi的基本支持。線程應用程序,如果您想走那條路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM