2013-02-04 3 views
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

사용 SetConsoleModeENABLE_LINE_INPUT 플래그를 해제합니다. 사용할 수있는 행 편집은 없지만 Enter 키를 누를 때까지 대기하지 않습니다.

int에 3 개의 WCHAR 개를 읽을 수 없습니다.

+1

여전히 버퍼에있는 _one_ 문자를 기다립니다. 즉 읽기를 계속 차단합니다. –

+2

'PeekConsoleInput'은 비 차단이지만,'ReadConsoleInput'을 사용하여 입력을 소비해야합니다 (또는'ReadConsoleChars'가 차단되지 않도록 입력 이벤트 유형을 확인하십시오). (그리고 당신이 콘솔 이벤트를 기다리고 싶을 때마다, 콘솔 핸들에서'WaitForSingleObject' 만). –

0

ReadFile/WriteFile을 사용하는 Windows의 비동기 입출력도 고려하십시오. 참조 MSDN on asynchronous I/O

좀 더 복잡하지만 원하는 것을 가지고 있습니다.

+2

콘솔 핸들 용으로 [작동하지 않습니다] (http://stackoverflow.com/questions/4551644/using-overlapped-io-for-console-input). –

+0

글쎄, 당신은 결코 배우지 않을거야 ... –