Thanks! But there is no time_out parameter in PeekConsoleInput. How to
<kimso.zhao@gmail.com> wrote in message
news:1152781048.880965.297700@h48g2000cwc.googlegroups.com...
How can I know if there is input or not from keyboard in console
application? I want to flush buffer to screen every second.
In Unix, select( ) with stdin and timeout can work well( return timeout
every second ), but in Windows, stdin is NOTSOCK, hence select won't
work.
In Windows, WaitForSingleObject( stdinHandle, 1000 ) will return
"WAIT_OBJECT_0" when waiting for input.
How come the following always goes into "WAIT_OBJECT_0"?
What could I do? Is there any way to use select( ) in Windows with
stdin?
Thanks!
#include <windows.h>
#include <stdio.h>
int main()
{
printf("->");
static HANDLE stdinHandle;
// Get the IO handles
// getc(stdin);
stdinHandle = GetStdHandle(STD_INPUT_HANDLE);
DWORD rc = WaitForSingleObject(stdinHandle, 1000);
if( rc == WAIT_TIMEOUT )
{
printf("Timeout...");
}
else if( rc == WAIT_ABANDONED )
{
printf("WAIT_ABANDONED");
}
else if( rc == WAIT_OBJECT_0 ) // Always go into this branch, why???
{
printf("WAIT_OBJECT_0");
}
else if( rc == WAIT_FAILED )
{
printf("Error:%d.", GetLastError());
}
return 0;
}
stdin/stdout/stderr are simple FILE* streams, there is not really any
concept of a console here.
You can use the low-level console API if you want direct access to the
console - i.e. PeekConsoleInput
--
James Brown
Microsoft MVP - Windows SDK
www.catch22.net
Free Win32 Tutorials and Sourcecode