我正在使用C(gcc)和ncurses來創建一個程序來監視來自串口的數據。該方案具有很大的while
,它讀取來自端口,並在同一時間傳來的數據,它打印在屏幕信息...如何從鍵盤獲得輸入,同時做其他事情?
但問題就在這裏:
它怎麼能看從我的鍵盤輸入,(因爲getch()
凍結程序,直到它獲得輸入)並同時讀取來自端口的信息?
也許我必須用另一種方式(不是大的while
),所以想法是歡迎的!
我正在使用C(gcc)和ncurses來創建一個程序來監視來自串口的數據。該方案具有很大的while
,它讀取來自端口,並在同一時間傳來的數據,它打印在屏幕信息...如何從鍵盤獲得輸入,同時做其他事情?
但問題就在這裏:
它怎麼能看從我的鍵盤輸入,(因爲getch()
凍結程序,直到它獲得輸入)並同時讀取來自端口的信息?
也許我必須用另一種方式(不是大的while
),所以想法是歡迎的!
make getch使用nodelay選項的非阻塞呼叫。
nodelay(stdscr,TRUE);
根據您的環境中找到你也許有功能的kbhit(),它只是峯值出現在鍵盤緩衝區,並返回非零,如果有一個關鍵的有 - 那麼你可以做getch()。
(conio.h)
也許fork()?只要記住,孩子在一個單獨的進程運行,因此變量不能直接它們之間共享
pid_t pID = fork(); if (pID == 0) { // child // Code executed only by child process // getch() ... } else if (pID < 0) { // failed to fork // Throw exception // ... } else { // parent // Code executed only by parent process // ... }
使用cbreak()
禁用行緩衝
nodelay(win, TRUE);
這將讓你非阻塞getch()
功能。
這將仍然阻塞,直到按下一個鍵。 – Wutaz 2014-04-28 19:09:28
對於這個問題,您可能需要調查線程:http://en.wikipedia.org/wiki/Thread_(computer_science) – sje397 2010-10-15 06:18:45
或'select()'。 – 2010-10-15 06:27:36