zoukankan      html  css  js  c++  java
  • qt多线程信号槽传输方式

    //简单介绍一下QT信号与槽的连接方式:    
    //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, 
    //如果信号与槽不在同一线程,将采用Qt::QueuedConnection的连接方式。    
     //Qt::DirectConnection表示一旦信号产生,立即执行槽函数。    
     //Qt::QueuedConnection表示信号产生后,将发送Event给你的receiver所在的线程,postEvent(QEvent::MetaCall,...), 
    //slot函数会在receiver所在的线程的event loop中进行处理。    
     //Qt::BlockingQueuedConnection表示信号产生后调用sendEvent(QEvent::MetaCall,...), 
    //在receiver所在的线程处理完成后才会返回;只能当sender,receiver不在同一线程时才可以。    
     //Qt::UniqueConnection表示只有它不是一个重复连接,连接才会成功。如果之前已经有了一个链接(相同的信号连接到同一对象的同一个槽上),那么连接将会失败并将返回false。    
     //Qt::AutoCompatConnection与QT3保持兼容性    
     //说明一下,对于任何的QThread来说,其线程只存在于run()函数内,其它的函数都不在线程内,所以此处要采用Qt::BlockingQueuedConnection,    
     //因为当SOCKET有数据到达时就会发出readyRead()信号,但是此时可能之前的receiveFile()还未执行完毕,之前使用的Qt::AutoConnection,    
     //结果传输大文件的时候就会出错,原因就在于只要有数据到达的时候,就会连接信号,但是数据接收还没处理完毕,而Qt::BlockingQueuedConnection会阻塞    
     //此连接,直到receiveFile()处理完毕并返回后才发送信号。 
    qDebug()<<"run thread:"<<QThread::currentThreadId();  
        //connect(tcpSocket,SIGNAL(readyRead()),this,SIGNAL(receiveSgl(tcpSocket))); 
    //  connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(receiveFile()),Qt::BlockingQueuedConnection); 
        exec(); 

  • 相关阅读:
    Javascript定义类(class)的三种方法
    npm命令ionic安装失败cordova安装失败解决方法
    解决类似 Requires: libstdc++.so.6(GLIBCXX_3.4.15)(64bit)的问题
    log_format为Nginx设置日志格式
    Nginx设置日志分割方法
    java和h5 canvas德州扑克开发中(二)
    java和h5 canvas德州扑克开发中(一)
    使用Reaver破解开启了WPS功能的wifi密码(wpa/wpa2)
    在Wifi网络中嗅探明文密码(HTTP POST请求、POP等)
    创建假的wifi热点
  • 原文地址:https://www.cnblogs.com/tiandsp/p/7580586.html
Copyright © 2011-2022 走看看