QPointer<Checker> checker;connect(checker, &Checker::newData, this, &MyClass::process, Qt::BlockingQueuedConnection); // process(QMap<QString, int>), QueuedConnection - не соединяется
class Checker: public QObject{ Q_OBJECT QThread m_thread; QTimer m_timer;signals: void stop();private slots: void started(); void stoped(); void timeout();public: Checker(); ~Checker(); Q_SIGNAL void newData(QMap<QString, int>);};
void Checker::started(){ m_timer.start(1000);}void Checker::stoped(){ m_timer.stop();}void Checker::timeout(){ emit newData({});}Checker::Checker(){ this->moveToThread(&m_thread); m_timer.moveToThread(&m_thread); m_thread.start(); connect(&m_thread, &QThread::started, this, &Checker::started); connect(this, &Checker::stop, this, &Checker::stoped); connect(&m_timer, &QTimer::timeout, this, &Checker::timeout);}Checker::~Checker(){ emit stop(); m_thread.quit(); m_thread.wait();}
std::function<QList<Data>> someFunc = [](){return QStrorageInfo()....;};
class MyGuiClass: public QObject { public slot: void someMethod(QList<Data>); }
C++ (Qt)void CheckerL::timerEvent( QTimerEvent * ){// если получатель сигнала newData еще не сбросил флажок// то мапа может быть в использовании, пропускаем// (хотя и маловероятно на интервале 1 сек) if (m_writeFlag) return; // взводим флажок, мапа пишется m_writeFlag = true; // строим мапу BuildMap(m_data); // посылаем сигнал в UI emit newData(this);}