次のコードはクラッシュし、Linuxをハングさせることさえありますが、それについて何かアイデアはありますか?
#include <QCoreApplication>
#include <QString>
#include <QMap>
#include <QList>
#include <QDebug>
#include <QThread>
#include <QTest>
long long emited=0;
long long handled=0;
int flag=0;
class A:public QThread
{
Q_OBJECT
public:
A(QString n):n_(n){moveToThread(this);}
void run() {
QMetaObject::invokeMethod(this, "g",Qt::QueuedConnection);
exec();
}
QString n_;
signals:
void as();
public slots:
void g(){
while(1) {
++emited;
emit as();
}
}
};
class Main:public QObject
{
Q_OBJECT
public slots:
void s0(){}
void s1(){
++flag;
++handled;
A *obj = qobject_cast<A*>(sender());
int nothandle=emited-handled;
--flag;
if(obj) {
qDebug()<<"s1"<<obj->n_<<"not handled:"<<nothandle<<flag;
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread th1,th2;
A a1("a1"),a2("a2");
Main m;
QObject::connect(&a1,SIGNAL(as()),&m,SLOT(s1()),Qt::QueuedConnection);
QObject::connect(&a2,SIGNAL(as()),&m,SLOT(s1()),Qt::QueuedConnection);
a1.start();
a2.start();
return a.exec();
}