我有一个非常简单的Windows控制台应用程序,它首先创建一个线程来处理stdin上的输入。它使用CreateThread()
中的main()
来创建线程,线程所做的第一件事情是调用getchar()
并阻止,等待。为什么在另一个线程中阻塞的IO阻止CreateWindowEx()返回
然后main()
使用RegisterClass()
注册一个窗口类并调用CreateWindowEx()
来创建一个不可见的消息窗口。
但是CreateWindowEx()
永不退货。
如果我删除线程中的getchar()
并将其替换为while (1) Sleep(1000);
,则一切正常。
如果我将Sleep(1000);
添加到线程函数的开头,CreateWindowEx()
调用成功,但线程中的I/O停止工作(getchar()
不返回)。
为什么被阻塞的第二个线程会干扰第一个线程?
你的窗口过程发生了什么?你收到了“WM_NC_CREATE”吗? –
窗口过程只是调用DefWindowProc(),除非它是WM_USER消息,在这种情况下,它会将该消息记录到文件中。如果我不在线程中调用getchar(),这将起作用。我不知道WM_NC_CREATE是否正在发送给它。 – Nicholas
你能提供[一个MCVE](http://stackoverflow.com/help/mcve)吗? –