考慮通過tcp套接字將200個檢測器連接到程序的情況。他們非常頻繁地發送他們的數據,並且我想盡可能有效地處理它。從多個tcp連接讀取數據
我可以考慮2種方法來解決這個問題,但我在QT方面很新,所以我不知道哪一個更好。
創建將運行從QRunnable()衍生的200個對象線程池,每個對象將包括一個插座和槽將被連接到該插座的信號,使關於一個檢測器的所有數據將被處理在那一個對象中。 (在run()方法中會有QEventLoop)
創建200個對象,每個對象將由套接字組成,並將這200個套接字信號連接到主線程中的一個插槽。所以它將在一個插槽中處理來自200個檢測器的數據。
哪種方法會更好consdering,在第一種方法會出現創建200個QEventLoops(每個對象)的事實呢?
好的舊'poll()'/'epoll()'有什麼問題?你不需要一堆線程來處理類似的事情。 –
Research'select()'函數。它旨在使單線程可以監視多個輸入通道。還有一些東西需要研究:函數調用比線程上下文切換快大約1000倍。 –
據我所知,Qt在QEventLoop的後臺使用select()(事件循環處於休眠狀態,直到內核事件發送給應用程序),那麼我的第二種方法有什麼問題?如果我錯了,請糾正我。 – notfound404