かなり時間が経過してしまいました。
Qt側にバグがあると言えるようなスキルは無いので、自分なりに色々と試してみましたが改善しませんでした。
ちょっと長いですが、コードを添付しますので、ご助言をお願いします。
(main.cpp)
QtQuick2ApplicationViewer viewer;
QQmlEngine* qengine = viewer.engine();
waitthread waitproc;
waitproc.setqengine(qengine);
waitproc.start();
(waitthread.h)
#ifndef WAITTHREAD_H
#define WAITTHREAD_H
#include <QThread>
#include <QMutex>
#include <QQmlEngine>
class waitthread : public QThread
{
Q_OBJECT
public:
explicit waitthread(QObject *parent = 0);
~waitthread();
void stop();
void setqengine(QQmlEngine *qmlenginepointer);
public slots:
protected:
void run();
private:
QString state;
volatile int running;
QQmlEngine *qmlenginep;
};
#endif // WAITTHREAD_H
(waitthread.cpp)
#include <QApplication>
#include <QDebug>
#include "waitthread.h"
waitthread::waitthread(QObject *parent) : QThread(parent)
{
state = "Thread Stop";
running = 0;
qmlenginep = NULL;
}
waitthread::~waitthread()
{
}
void waitthread::run()
{
running = 1;
bool onoff = false;
while(running == 1){
state = "Thread Running";
// qmlenginep->trimComponentCache();
// qmlenginep->collectGarbage();
// QApplication::processEvents(QEventLoop::AllEvents);
// qDebug() << "Trim Component Cache !!";
if(onoff){ qmlenginep->trimComponentCache(); qDebug() << "Trim Component Cache !!"; } else{ qmlenginep->collectGarbage(); qDebug() << "collectGarbage !!"; } QApplication::processEvents(QEventLoop::AllEvents); onoff = !onoff; } state = "Thread Stop";}
void waitthread::setqengine(QQmlEngine *qmlenginepointer)
{
qmlenginep = qmlenginepointer;
}
以上のコードで10秒置きにcollectGarbageとtrimComponentCacheを実行していますが、最初のcollectGarbageでSegmentation faultが発生してプログラムが突然終了します。
よろしくお願いします。