我有一個非常簡單的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)嗎? –