Use IsGUIThread to initialize message queue

This commit is contained in:
Gabriel Majeri 2017-07-18 20:57:22 +03:00
parent 00197b3d04
commit 8add21b04f

View file

@ -98,16 +98,16 @@ impl EventsLoop {
}); });
unsafe { unsafe {
let mut msg = mem::uninitialized();
// Calling `PostThreadMessageA` on a thread that does not have an events queue yet // Calling `PostThreadMessageA` on a thread that does not have an events queue yet
// will fail. In order to avoid this situation, we call `PeekMessage` to initialize // will fail. In order to avoid this situation, we call `IsGuiThread` to initialize
// it. // it.
user32::PeekMessageA(&mut msg, ptr::null_mut(), 0, 0, 0); user32::IsGUIThread(1);
// Then only we unblock the `new()` function. We are sure that we don't call // Then only we unblock the `new()` function. We are sure that we don't call
// `PostThreadMessageA()` before `new()` returns. // `PostThreadMessageA()` before `new()` returns.
local_block_tx.send(()).unwrap(); local_block_tx.send(()).unwrap();
let mut msg = mem::uninitialized();
loop { loop {
if user32::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) == 0 { if user32::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) == 0 {
// Only happens if the message is `WM_QUIT`. // Only happens if the message is `WM_QUIT`.