From: Mathias L. <mat...@br...> - 2004-02-18 20:00:35
|
ons 2004-02-18 klockan 10.03 skrev Werner Schweer: > On Tuesday 17 February 2004 19:57, Mathias Lundgren wrote: > ... > > I noticed that the gui object is created within the Mess in organ. What > > is the general idea about interaction between the gui and the mess? > > Earlier, the fluidsynth Mess (synth/client/tone generator, whichever you > > prefer) had to send messages to the gui every time it wanted to notify > > the gui of changes. I'm considering letting the client take care of > > updating things in the gui directly instead of having to send the gui a > > lot of messages, if this is appropriate behaviour? > > > > One example could be loading a soundfont. The gui doesn't need to know > > anything about how many fonts there are loaded, it just displays nice > > little boxes and fields with info about channels and such. The gui > > cannot, however, add the soundfont to the list after sending a "push > > soundfont" msg to the synth, since there might be trouble loading the > > font, so why not instead update the gui directly, from within the synth > > whenever a new font is loaded instead of having to tell the gui the > > soundfont was loaded? (This is getting so flexible I suspect I'm getting > > confused having to figure out my own solutions instead of copying > > them... ;-) > > you have to consider that the gui and the synth run in different > threads. The synth normally cannot call any qt library functions > (they are not all thread safe). > Further consider the synth runs in a _realtime_ thread. You cannot > call any function which blocks in any way. You even cannot call > functions which are thread safe by setting any semaphores. This > includes malloc and of course new, delete and all library functions > which use new/delete (all QString function i suspect). > What you need is a non blocking interprocess communication mechanism > between gui and synthesizer. If you want the gui to do something > you must tell it with a message and let the gui do gui stuff. You > cannot do it directly. > > Werner Of course... Otherwise the lock-free ringbuffer wouldn't be of much use.... Thanks for waking me up. /Mathias |