(Mis)using threads (solution found)

Alexandre Julliard julliard at winehq.com
Thu Mar 13 12:35:09 CST 2003


"Florian Schirmer" <jolt at tuxbox.org> writes:

> I haven't looked deeper into what has caused this trouble, but i suspect
> some sleeping/waiting trouble. The new thread proc (for both the clone and
> the CreateThread thread) does nothing except registering an alsa async
> callback handler and then sleeping (using linux native nanosleep) all the
> time. The old thread handler (which works pretty well on win32) probably
> calls in some sort if message handling loop. Using the native win32 Sleep()
> call instead of linux native nanosleep will break things again. So wine is
> unable to waste time in the proper way ;-)

Yes, it's a known issue, our Sleep() wastes a bit too much CPU for
short waits. Something like this may help:

Index: scheduler/synchro.c
===================================================================
RCS file: /opt/cvs-commit/wine/scheduler/synchro.c,v
retrieving revision 1.45
diff -u -r1.45 synchro.c
--- scheduler/synchro.c	26 Aug 2002 21:53:26 -0000	1.45
+++ scheduler/synchro.c	13 Mar 2003 18:05:47 -0000
@@ -184,6 +184,7 @@
 VOID WINAPI Sleep( DWORD timeout )
 {
     WaitForMultipleObjectsEx( 0, NULL, FALSE, timeout, FALSE );
+    if (timeout <= 1) sched_yield();
 }
 
 /******************************************************************************

-- 
Alexandre Julliard
julliard at winehq.com



More information about the wine-devel mailing list