[vlc-devel] [PATCH] win32: use PostMessage in event handlers to avoid deadlocks

Rafaël Carré funman at videolan.org
Sun Feb 5 03:52:57 CET 2012


Le 2012-02-04 21:45, Sergey Radionov a écrit :
> 2012/2/5 Rafaël Carré <funman at videolan.org>:
>> Le 2012-02-04 11:34, Sergey Radionov a écrit :
>>> when main thread wait something. It's fixing "stop" bug.
>>> ---
>>>  common/win32_fullscreen.cpp |    8 ++++----
>>>  1 files changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/common/win32_fullscreen.cpp b/common/win32_fullscreen.cpp
>>> index e1d7f0a..c0d8ab3 100644
>>> --- a/common/win32_fullscreen.cpp
>>> +++ b/common/win32_fullscreen.cpp
>>> @@ -498,7 +498,7 @@ void VLCControlsWnd::SetVideoPosScrollRangeByVideoLen()
>>>
>>>  void VLCControlsWnd::SetVideoPosScrollPosByVideoPos(libvlc_time_t CurScrollPos)
>>>  {
>>> -    SendMessage(hVideoPosScroll, (UINT)PBM_SETPOS, (WPARAM) (CurScrollPos >> VideoPosShiftBits), 0);
>>> +    PostMessage(hVideoPosScroll, (UINT)PBM_SETPOS, (WPARAM) (CurScrollPos >> VideoPosShiftBits), 0);
>>>  }
>>>
>>>  void VLCControlsWnd::SetVideoPos(float Pos) //0-start, 1-end
>>> @@ -561,15 +561,15 @@ void VLCControlsWnd::handle_input_state_event(const libvlc_event_t* event)
>>>      switch( event->type )
>>>      {
>>>          case libvlc_MediaPlayerPlaying:
>>> -            SendMessage(hPlayPauseButton, BM_SETIMAGE,
>>> +            PostMessage(hPlayPauseButton, BM_SETIMAGE,
>>>                          (WPARAM)IMAGE_BITMAP, (LPARAM)RC().hPauseBitmap);
>>>              break;
>>>          case libvlc_MediaPlayerPaused:
>>> -            SendMessage(hPlayPauseButton, BM_SETIMAGE,
>>> +            PostMessage(hPlayPauseButton, BM_SETIMAGE,
>>>                          (WPARAM)IMAGE_BITMAP, (LPARAM)RC().hPlayBitmap);
>>>              break;
>>>          case libvlc_MediaPlayerStopped:
>>> -            SendMessage(hPlayPauseButton, BM_SETIMAGE,
>>> +            PostMessage(hPlayPauseButton, BM_SETIMAGE,
>>>                          (WPARAM)IMAGE_BITMAP, (LPARAM)RC().hPlayBitmap);
>>>              break;
>>>      }
>>
>> Are the messages always handled by the receiving thread, since we don't
>> wait for it with PostMessage?
> Messages  are always handled by thread which owns window (thread in
> which window was created). PostMessage add message to input queue of
> thread but don't wait handling of it (SendMessage always wait until
> message will be handled).

Looks OK then



More information about the vlc-devel mailing list