关于Qt信号槽线程之间采用BlockingQueuedConnection的阻塞原理

 

//Qt部分源码如下
.....//其他代码
else if(type == Qt::BlockingQueuedConnection)
{
    if(currentThread == objectThread) //如果是同一条线程,就死锁了
        qWarning("QMetaObject::invoke: Dead lock detected");

    QSemaphore semaphore; //信号量
    QCoreApplication::postEvent(Object, new QMetaCallEvent(slot, 0, -1, 0, 0, qrgv, &semaphore));  //将函数指针、函数参数、信号量的指针发送到事件队列
    semaphore.acquire(); //默认形参为1,;获取1个数据,如果没有准备1个好数据,则阻塞
}
else
{
.... //其他代码


 

你可能感兴趣的:(c++,Qt)