![](/img/trans.png)
[英]Qt QIODevice::write / QTcpSocket::write and bytes written
[英]Bytes written with QTcpSocket::write has not been received by server when Main Thread running in infinite loop?
我正在開發一個與服務器交互的應用程序。
啟動時,它正在從數據庫加載一些數據,當數據庫很大時,應用程序將在很長的循環中運行,可以說我在db中有10個lac記錄,循環將迭代10個lac時間。
經過一段固定的時間間隔(由用戶設置)后,例如說1秒鍾,我的應用程序正在將心跳消息發送到不同線程中的服務器。
在正常情況下,它工作正常,但當應用程序在長循環中運行時,服務器未收到心跳消息,盡管QTcpSocket::write()
返回的寫入字節與我寫入的內容相同(成功),但tcpDump
未顯示接收到的任何字節。
我用過
tcpSocket->setSocketOption(QAbstractSocket::LowDelayOption , 1);
tcpSocket->setSocketOption(QAbstractSocket::KeepAliveOption , 600);
嘗試在循環中添加processEvents()
(假設每1000個周期或每100ms),以保持應用程序的響應速度。 當然,如果遇到此類問題,則表明設計不良。 考慮重新設計您的應用程序以使用多個線程,即用於長時間操作(您的循環)的主線程和輔助線程。 在Qt上可以找到更多有關線程支持的信息 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.