非阻塞从标准输入读取

3

我希望ReadConsoleW()在读取特定字节数后返回。但它没有返回。

如何使ReadConsoleW()在完成指定字节数的读取后立即返回?

我尝试过的代码如下:

#include <stdio.h>
#include <Windows.h>


int main()
{
    //something is being written to stdin.
    Sleep(2000);
    int b;
    int r;
    //read 3 wide character
    ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &b, 3*sizeof(TCHAR), (LPDWORD)&r, NULL);
    //problem: no returns until enter pressed
    putc(b,stdout);
    while(1)
    {};
}
2个回答

2
使用SetConsoleMode来关闭ENABLE_LINE_INPUT标志。这样就没有行编辑功能,但也不需要等待按下Enter键。
请注意,您不能将三个WCHAR读入一个int中。

2
但它仍然会等待缓冲区中至少一个字符...也就是说,它仍然是阻塞读取。 - Agnius Vasiliauskas
2
PeekConsoleInput 是非阻塞的,但你必须使用 ReadConsoleInput 来消耗输入(或检查输入事件类型以确保 ReadConsoleChars 不会阻塞)。 (每当你想要等待控制台事件超时时,只需在控制台句柄上调用 WaitForSingleObject)。 - Anton Kovalenko

-2

同时考虑在Windows中使用ReadFile/WriteFile进行异步I/O。 请参阅MSDN关于异步I/O的文档

这可能会更加复杂,但您可以得到想要的结果。


3
它不能用于控制台句柄。 - Anton Kovalenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接