如何在Windows上无阻塞地读取可用输入

在Linux上,我可以在不阻止进程的情况下读取可用输入:

fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK ) char buf[n]; int r = fread(buf, 1, n, stdin); if (r == 0){ printf("nothing\n"); } else { printf("read: "); fwrite(buf, 1, r, stdout); printf("\n"); } 

输入源可以是任何东西,例如文件,终端或管道。

我怎么能在Windows XP上做到这一点?

谢谢。

为什么不从第二个线程读取输入? 根据您的具体情况,这可能是一种更简单的方法,而不是使用非阻塞IO。

您可以通过将FILE_FLAG_OVERLAPPED传递给CreateFile()来在Windows上实现此目的。 它与Linux看起来并不相同,可能会有一些细微的差别,但它实现了同样的目的。

查看同步与异步IO的MSDN页面,它提供了有关各种选项的更多详细信息。