2012-04-04 179 views
3

上運行的Qt應用程序,我得到了下面的錯誤,一旦服務器的其他備份作業在夜間開始運行:是否Qt的事件偵聽器佔用的文件句柄?

QEventDispatcherUNIXPrivate(): Unable to create thread pipe: Too many open files 
QEventDispatcherUNIXPrivate(): Can not continue without a thread pipe 

是否有可能在連接功能需要一個「UNIX文件句柄」?例如,如果我執行以下操作,是否需要從操作系統獲取額外的文件句柄資源,直到斷開連接?

connect(this, SIGNAL(sendConfig(QString, QString)), deviceCon, SLOT(setDeviceConfig(QString, QString))); 
emit sendConfig(configEntry, configValue); 
disconnect(this, SIGNAL(sendConfig(QString, QString)), deviceCon, SLOT(setDeviceConfig(QString, QString))); 

謝謝。 Spikey

回答

2

關於這個問題,我能找到的最好的參考是QT 4.2

的回答你的問題是肯定的。類打開一個管道創建然後被正在select用於處理事件的文件句柄。

P.S.在4.8剛剛確認類似的方法

+0

所以,如果我理解正確的話:如果我調用connect()的一個新的線程5次(沒有斷開()調用),每一個新的線程將使用多達6個文件句柄(一個對於每個偵聽信號句柄都有一個)。甚至每個連接()有兩個文件句柄?意味着11個文件句柄? – spikey 2012-04-04 14:41:36

+0

不,它不需要你爲每個調度對象創建一個管道。所以,如果你有一個調度程序多線程連接文件描述符的數量仍然是2 – Karlson 2012-04-04 14:46:31

+0

優秀澄清。非常感謝你。 – spikey 2012-04-04 14:56:27