test case demonstrating PeekMessage give up timeslices

Oliver Mössinger olivwork at web.de
Fri Aug 5 03:42:53 CDT 2005


We changed our program to avoid the needless polling (only two PeekMessage are
needet then). We add also the PM_NOYIELD. This gives back the reaction of the
program if some other process consumes process time. But the speed is more
reduced than windows.

Your patch works for our program. It seems it is faster than before.

So now our program works, not fine but it works.

If you can find a better fix, it would be fine...

> Jeremy White <jwhite at codeweavers.com> writes:
> > However, this makes it clear to me that the yield
> > in message.c is largely moot; you need to remove both
> > that one and the one in ntdll/sync.c to have
> > any material effect on Wine timing with messages.
>
> Actually it should be enough to not yield in MsgWaitForMultipleObjects
> when we are only checking for X events, and that would be correct IMO
> since the check for X events is always in addition to the normal
> behavior. Something like this should do it:
>
> Index: dlls/x11drv/event.c
> ===================================================================
> RCS file: /opt/cvs-commit/wine/dlls/x11drv/event.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 event.c
> --- dlls/x11drv/event.c	25 Jul 2005 11:08:43 -0000	1.56
> +++ dlls/x11drv/event.c	3 Aug 2005 08:28:52 -0000
> @@ -295,12 +295,13 @@ DWORD X11DRV_MsgWaitForMultipleObjectsEx
>
>      data->process_event_count++;
>      if (process_events( data->display, mask )) ret = count;
> -    else
> +    else if (count || timeout)
>      {
>          ret = WaitForMultipleObjectsEx( count+1, new_handles, flags &
> MWMO_WAITALL, timeout, flags & MWMO_ALERTABLE ); if (ret == count)
> process_events( data->display, mask );
>      }
> +    else ret = WAIT_TIMEOUT;
>      data->process_event_count--;
>      return ret;
>  }



More information about the wine-devel mailing list