考虑通过tcp套接字将200个检测器连接到程序的情况。他们非常频繁地发送他们的数据,并且我想尽可能有效地处理它。从多个tcp连接读取数据
我可以考虑2种方法来解决这个问题,但我在QT方面很新,所以我不知道哪一个更好。
创建将运行从QRunnable()衍生的200个对象线程池,每个对象将包括一个插座和槽将被连接到该插座的信号,使关于一个检测器的所有数据将被处理在那一个对象中。 (在run()方法中会有QEventLoop)
创建200个对象,每个对象将由套接字组成,并将这200个套接字信号连接到主线程中的一个插槽。所以它将在一个插槽中处理来自200个检测器的数据。
哪种方法会更好consdering,在第一种方法会出现创建200个QEventLoops(每个对象)的事实呢?
好的旧'poll()'/'epoll()'有什么问题?你不需要一堆线程来处理类似的事情。 –
Research'select()'函数。它旨在使单线程可以监视多个输入通道。还有一些东西需要研究:函数调用比线程上下文切换快大约1000倍。 –
据我所知,Qt在QEventLoop的后台使用select()(事件循环处于休眠状态,直到内核事件发送给应用程序),那么我的第二种方法有什么问题?如果我错了,请纠正我。 – notfound404