From: nobuyoshi nakada Date: 2005-11-04T18:46:52+09:00 Subject: Re: [PATCH] win32/win32.c rb_w32_select patch for polling stdin Hi, At Fri, 4 Nov 2005 15:56:34 +0900, mmiller@hick.org wrote in [ruby-core:06565]: > Recently I encountered a problem that I think others have experienced > before that has to do with using gets on standard input and its side > effect of blocking all other ruby threads on win32. The problem has to > do with the fact that the existing code will simply indicate that there > is data on any non-socket file handle that is passed to select (which > includes stdin). This leads to a blocking call being made to read (via > getc) that prevents other ruby threads from running until data has been > written to the console. To help address this problem, I'm submitting a > patch that seems to address the issue, though perhaps there is a better > way to go about integrating it (I'll leave that up to the developers). It should have been improved with 1.9, I guess. > + if (WaitForSingleObjectEx(GetStdHandle(STD_INPUT_HANDLE), > + 0, TRUE) == WAIT_OBJECT_0) > + stdin_data = 1; It is signaled even if a mouse event arrived, e.g., just moving mouse. -- Nobu Nakada