您可以使用ncurses或者,如果你不想,你就可以按照本blog post描述的使用選擇。基本上,您可以使用select
並指定超時。如果stdin FD被設置,那麼你可以安全地讀取它,並且不會阻塞。如果您想要了解更多信息,請選擇this out,當然還有Wikipedia。知道這是一個方便的電話。例如,
// if != 0, then there is data to be read on stdin
int kbhit()
{
// timeout structure passed into select
struct timeval tv;
// fd_set passed into select
fd_set fds;
// Set up the timeout. here we can wait for 1 second
tv.tv_sec = 1;
tv.tv_usec = 0;
// Zero out the fd_set - make sure it's pristine
FD_ZERO(&fds);
// Set the FD that we want to read
FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0
// select takes the last file descriptor value + 1 in the fdset to check,
// the fdset for reads, writes, and errors. We are only passing in reads.
// the last parameter is the timeout. select will return if an FD is ready or
// the timeout has occurred
select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
// return 0 if STDIN is not ready to be read.
return FD_ISSET(STDIN_FILENO, &fds);
}
也見到這對Peek stdin using pthreads
你能看懂輸入一個新的線程,然後從你的主線程殺死螺紋10秒鐘過去後? – GWW
除了@ GWW的建議之外,您始終可以使用低級別的操作系統設施。在Linux/* nix中,我記得它叫做「原始」I/O。但是我從事這些工作已經很長時間了。 –