Qt中是否有“吃”信号的方法?
is there a method to `eat` the signal in Qt?
我使用for循环向http://www.example.com
发送请求:
for(int i = 0; i < size; ++i)
{
request.setUrl("http://www.example.com");
manager.get(request);
}
和我想并行处理回复,所以我运行10个线程,每个线程都有一个插槽函数来将回复添加到Qvector<QNetworkReply*>
。我将这个10槽位函数连接到manager
的finished(QNetworkReply*)
信号上。在本例中,当发出finished(QNetworkReply*)
时,将调用此10槽函数将此回复添加到向量10次。我想如果一个线程已经处理了这个函数,其余的9个线程放弃这个信号,等待另一个信号发出。有没有办法吃finished(QNetworkReply*)
在第一个插槽?
http://en.wikipedia.org/wiki/Thread_pool_pattern
我想你正在寻找的是一个线程池来处理请求。一群工人等待做同样的事情,一旦有一个请求来处理它。
http://qt-project.org/doc/qt-5/qthreadpool.html细节
QThreadPool
类管理QThread
s的集合。
QThreadPool
管理和回收单个QThread
对象,以帮助减少线程使用线程的程序中的创建成本。每个Qt应用程序都有一个全局QThreadPool
对象,可以通过调用globalInstance()
.使用
QThreadPool
线程之一,子类QRunnable
和实现run()
虚函数。然后创建一个这样的对象类并传递给QThreadPool::start()
。
https://www.google.com/search?q=qthreadpool +网络http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php
希望对你有帮助。
如果我正确理解你说的话,你有10个插槽(每10个线程中有一个)连接到一个信号。你希望每次发射时只运行其中一个。
这不是Qt信号的工作方式。每次发出信号时,Qt信号都会触发连接到信号的每个插槽。您需要更多的消息队列,其中可能的工作线程可以在队列上等待。
您可能想要查看QWaitCondition示例—等待条件是您可以实现的一种方式,让工人等待某事。
- Qt将信号与另一个类方法连接
- 在另一个线程上发出 QObject 信号的正确方法?
- 如何将信号处理程序添加为方法
- 如何在长时间运行的方法中等待信号?
- 使用信号检测子进程何时终止的最佳方法是什么?
- 如何将Singleton类信号连接到MainWindow类插槽或方法
- 这是在Qt信号和插槽中使用参数调用函数的好方法吗?
- 来自静态方法的QT信号
- 带信号和插槽的测试方法
- Qt时隙方法(这是另一类)在发射信号时不触发
- 有没有一种方法可以将升压信号和插槽与不可复制的对象一起使用
- Qt connect(*发送器,*信号,*接收器,*方法)不调用插槽
- Qt :等待来自函数的信号的最佳方法
- 有没有一种方法可以获取在处理信号期间访问的指针
- 在C++glib应用程序中连接到dbus信号的最简单方法
- 这是从信号处理程序返回值的可靠方法吗
- 有没有一种方法可以将升压信号直接连接到另一个信号
- 如何将信号处理程序注册为类方法
- Qt-有没有一种方法可以获得一个类中所有自定义插槽和信号的列表
- 无法调用C信号方法中的类方法