C 从标准数据中非阻塞读取
我希望C 从标准数据中非阻塞读取,c,windows,console,nonblocking,C,Windows,Console,Nonblocking,我希望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 c
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)
{};
}
#包括
#包括
int main()
{
//正在向stdin写入某些内容。
睡眠(2000年);
int b;
INTR;
//读取3个宽字符
ReadConsoleW(GetStdHandle(标准输入句柄)和b,3*sizeof(TCHAR),(LPDWORD)和r,NULL);
//问题:在按下enter键之前不会返回
putc(b,stdout);
而(1)
{};
}
用于关闭启用线路输入
标志。没有行编辑可用,但不会等到按下Enter键
请注意,不能将三个
WCHAR
s读入int
还可以考虑在Windows中使用ReadFile/WriteFile进行异步I/O。
看
它稍微复杂一点,但您确实有您想要的。但它仍将等待缓冲区中至少一个字符。。。i、 e.仍在阻止读取。
peek控制台输入
是非阻止的,但您必须使用ReadConsoleInput
来使用输入(或检查输入事件类型以确保ReadConsoleChars
不会阻止)。(当您想等待控制台事件超时时,只需在控制台句柄上执行WaitForSingleObject
)。