[Interest] How to properly delete qApp?
Nuno Santos
nunosantos at imaginando.pt
Wed Mar 16 11:51:01 CET 2016
Hi,
My application is targeted to run as a software plugin inside another
third party application. When a instance of my plugin is instanciated I
check if qApp exists. If so, I will use that pointer, otherwise I will
reuse the pointer. I also increment a counter to know how many instances
of my plugin are active. When the plugin is deleted I check the counter.
If it gets to zero I will delete qApp.
The problem is that I'm having a different behaviour across platforms.
On OSX I don't even need to delete qApp, everything works alright. On
Windows, if I don't delete the qApp, the host hangs, seems like a dead
lock, so I need to force delete it and this is what I am doing:
_app->processEvents(QEventLoop::AllEvents, 1000);
_app->quit();
delete _app;
_app = 0;
This way, the host is able to close and exit but the return code is not
zero, it is basically crashing but no error window pops up. If I don't
call delete _app, the host hangs and it is not able to exit.
It is important to refer that I'm using a static and namespaced build of
Qt and that I'm calling a new Windows thread to call qApp exec.
The thread body has two modes. Why? Because when I call _app->exec() it
immediatelly returns saying that it must be called from main thread,
however things continue to happen, Qml works, QObjects works, apparently
at least! The approach works also, not apparent problems, but the thread
doesn't return.
#ifdef Q_OS_WIN
unsigned int id;
Qt::HANDLE h = (Qt::HANDLE) _beginthreadex(NULL, 0, threadInit, this, 0,
&id);
#endif
#ifdef Q_OS_WIN
unsigned int __stdcall threadInit(void *args)
{
qDebug() << "--Qt Init Thread";
IVst *plugin = (IVst*)args;
#if 1
while(plugin->_running)
plugin->_app->processEvents();
#else
plugin->_app->exec();
#endif
qDebug() << "--Thread done";
return 0;
}
So far on OSX I was not even deleting the app and it worked without issues.
Does anyone has a clue of what is going on?
Thanks,
Regards,
Nuno
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160316/7d43b51a/attachment.html>
More information about the Interest
mailing list