RandomActiveWorker active dynamic_cast RandomActiveWorker m_worker if

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
RandomActiveWorker * active = dynamic_cast<RandomActiveWorker*>(m_worker);
if (active)
{
// здесь нельзя делать m_worker->shutdown();
// потому что "emit boo();" выполнится в неправильной нитке,
// и сигнал улетит в неправильный EventLoop
QMetaObject::invokeMethod (m_worker,
"shutdown",
Qt::BlockingQueuedConnection); // дождаться результата
}
else // not active
{
m_worker->shutdown(); // not active не может поймать invokeMethod,
// потому что он спит (на сокете ли, на очереди ли)
}