产生很多Qthread让gui挂

时间:2016-07-07 21:32:40

标签: qt user-interface freeze qthread

我需要生成很多QThread个实例,这些实例会定期处理循环中的某些数据。所以我从QMainWindow开始。但是,当我开始大约200-300他们,取决于机器,我得到gui冻结一分钟。我不想要这种行为,可以做些什么来避免这种情况?在gui线程中创建一个qthread和class对象是否实用,然后将它们放在一个列表中,然后从QFutureQThreadPool启动它们,类似的东西? :

 MyClass * obj = new Myclass(id);
 QThread * thread = new QThread();
 obj->moveToThread(thread);
 connect(obj,SIGNAL(logData(QString)),this,SLOT(dataToListView(QString));
 list->append(thread);

 taskStartAllThreads * task = new taskStartAllThreads();
 task->setProxyList(list);

 QThreadPool::globalInstance()->start(task);
 // later in QThreadPool task
     class taskStartAllThreads : public QObject,public QRunnable
     {
        Q_OBJECT
        public:
         void setProxyList(QList<QThread*> * list){
            m_threads = list;
         }
        protected:

        void run(){
            foreach(QThread* thread,m_threads)
                thread->start();
        }
        signals:
           void finished(); 
        private:
           QList<QThread*> * m_threads;
    };

我不确定这是否是正确的解决方案,有人知道更好的解决方案,以避免gui在很多线程启动时冻结。

0 个答案:

没有答案