代码,借用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(); 
}