繁体   English   中英

有没有办法在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*)

如果我正确地理解了你所说的话,你就有10个插槽(每个10个插槽中有一个)连接到一个信号。 并且你只希望其中一个在每个发射上运行。

这不是Qt信号的工作原理。 每次发射信号时,Qt信号都会触发连接到信号的每个插槽。 您需要更多的消息队列,工作人员可以在队列中等待。

您可能希望查看QWaitCondition 示例 - 等待条件是您可以实现让工作人员等待某事做的一种方式。

http://en.wikipedia.org/wiki/Thread_pool_pattern

我认为您正在寻找的是一个处理请求的线程池。 一堆工人等着做同样的事情,一旦有请求处理它。

http://qt-project.org/doc/qt-5/qthreadpool.html#details

QThreadPool类管理QThread的集合。

QThreadPool管理和重新处理各个QThread对象,以帮助减少使用线程的程序中的线程创建成本。 每个Qt应用程序都有一个全局QThreadPool对象,可以通过调用globalInstance()来访问它。

要使用其中一个QThreadPool线程,请QRunnable并实现run()虚函数。 然后创建该类的对象并将其传递给QThreadPool::start()

https://www.google.com/search?q=qthreadpool+network

http://www.bogotobogo.com/Qt/Qt5_QTcpServer_QThreadPool_Multithreaded_Client_Server.php

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM