代码,借用dbzhang800老师的代码,我修改了点
问题
因为slot里是一个死循环函数,所以当发送 dummy.emitsig2()的时候,
slot2槽函数一直没有执行,只有第一个槽slot执行完成后,slot2槽才能执行
那么如果我想在slot里执行完i += 5;阻塞后,马上通过slot2执行i -= 10;然后得出i值为-5,
但是现在却实现不了,只有slot执行完成,才会去执行slot2,那么我该怎么办呢?
因为slot和slot2是在同一个线程里执行的,那么我怎么才能使slot2执行在与主线程和slot线程不同的线程里呢?
怎样才能实现多个线程同时修改一个变量这种方式呢?
谢谢大家
#include <QtCore/QCoreApplication>
#include <QtCore/QObject>
#include <QtCore/QThread>
#include <QtCore/QDebug>
class Dummy:public QObject
{
Q_OBJECT
public:
Dummy(QObject* parent=0):QObject(parent) {}
public slots:
void emitsig()
{
emit sig();
}
void emitsig2()
{
emit sig2();
}
signals:
void sig();
void sig2();
};
class Object:public QObject
{
Q_OBJECT
public:
Object(){i = 0;}
int i;
public slots:
void slot()
{
qDebug()<<"from thread slot:" <<QThread::currentThreadId();
i += 5;
while(1)//死循环,阻塞线程
{
}
}
void slot2()
{
i-= 10;
qDebug()<<"from thread slot2:" <<QThread::currentThreadId();
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<"main thread:"<<QThread::currentThreadId();
QThread thread;
Object obj;
Dummy dummy;
obj.moveToThread(&thread);
QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot()));
thread.start();
dummy.emitsig();
QObject::connect(&dummy, SIGNAL(sig2()), &obj, SLOT(slot2()));
dummy.emitsig2();
return a.exec();
}