Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从标准数据中非阻塞读取_C_Windows_Console_Nonblocking - Fatal编程技术网

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
)。