- 487 名前:396 mailto:sage [2018/02/22(木) 10:45:19.02 ID:9+xI5ulA.net]
- >>469
2つ目の WaitForMultipleObjectsEx() の中で停止してしまっていることが判明。 本来、先頭に Msg が付く方の API は、メッセージと HANDLE の両方を同時に 監視するようなコードでなくてはならないハズなのに、そうなってないらしい。 process_events() が、MotionNotify の XEvent が来ていたら WM_MOUSEMOVE メッセージをキューにポストするらしいが、最初に一度だけ調べて XEvent が 来ていない場合は、以後、全く XEvent を調査せずに他の HANDLE 群の変化だけ を待機してしまうらしい。 DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags ) { DWORD ret; struct x11drv_thread_data *data = TlsGetValue( thread_data_tls_index ); if (!data) { if (!count && !timeout) return WAIT_TIMEOUT; return WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL, timeout, flags & MWMO_ALERTABLE ); } if (data->current_event) mask = 0; /* don't process nested events */ if (process_events( data->display, filter_event, mask )) ret = count - 1; else if (count || timeout) { ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL, timeout, flags & MWMO_ALERTABLE ); if (ret == count - 1) process_events( data->display, filter_event, mask ); } else ret = WAIT_TIMEOUT; return ret; }
|

|