by Aaron » Sat Oct 10, 2009 1:01 pm
Hi All,
I think I've got a handle on this problem. The PeekMessage function in Wine is more expensive than on Windows, and also yields the rest of the processor's timeslice. Regrettably, the progress bar that L3DT uses to display progress on single-threaded calculations calls PeekMessage in a loop to look for the event handler for a click on the cancel button. This loop of PeekMessage calls in Wine stalls the application because it's constantly yielding its timeslices.
In L3DT v2.7 build 36, released today, I have changed the progress bar so that the PeekMessage loop is only invoked when the progress box actually has a cancel button, which is seldom for this particular window . In the next build I have also changed the PeekMessage call to use the PM_NOYIELD flag to ensure that any progress boxes with cancel buttons won't freeze the application when running in Wine.
Cheers,
Aaron.