[Interest] Running Qt in a shared library on a Mac

Till Oliver Knoll till.oliver.knoll at gmail.com
Fri Jan 24 19:15:11 CET 2014


Am 24.01.2014 um 18:21 schrieb Thiago Macieira <thiago.macieira at intel.com>:

> On sexta-feira, 24 de janeiro de 2014 18:19:20, Till Oliver Knoll wrote:
>>> I /assume/ that it works, just like it works with Qt.
>> 
>> Well, then it must work with "Cocoa only", too - case solved
> 
> So you *can* run Qt and Cocoa things in a different thread than main() was run on.

I am not sure I am following you here properly: is this a statement based on something you actually tried yourself, or is it a statement you want me to confirm? Your "_So_ you can run..." formulation sounds a little bit like you're deriving something from something that I said, which on its turn is based on the *asumption* (sic! One more ;)) that your initial statement "just like it works with Qt" really meant "Using a POSIX thread and a *Cocoa* based Qt it is possible to start the Qt event queue in a separate "GUI thread" (and that is really something that has been confirmed by someone for real).

However I just spotted the weak point of my assumption ;) The Qt event queue is most likely /not/ using NSApplication, nor its Cocoa event queue (nor most other Cocoa classes such as NSUndoManager which seem to insist to run on the "main thread").

So the fact that a "Cocoa based QApplication" runs fine in a POSIX created thread (which probably causes NSThread:isMainThread to always return "YES", and all involved Cocoa classes used by Qt are hence happy) does not necessarily mean that the same is true for a "pure" NSApplication based Cocoa app ;)

> However, NSApplication is not thread-safe, so QApplication and NSApplication 
> must be in the same thread, whichever it is.

The initial question was how to place a *QApplication* in a separate "GUI thread", so by now I think the answer is "yes, as long as the thread is created with the POSIX API and *not* by NSThread (as to fool the involved Cocoa classes that they are still in the "main thread")."

The NSApplication thing was just me trying to verify whether it was *really* not possible to place a Cocoa app in an NSThread (we don't know yet about POSIX threads - but who cares, it works with Qt ;)).

Happy week-end, all!
  Oliver





More information about the Interest mailing list