我有Qt應用程序,有一些外部庫依賴關係。我的應用程序和外部庫不使用線程(在我看來)。他們的來源中沒有thread
單詞。一個庫有衍生自QTcpServer
的否listen()
方法重載。 (OS是windows)Qt內部線程
我在Window
類的構造函數中創建一個對象並調用listen()
方法。
的QObject:在
listen()
方法調用出現在控制檯的警告信息不能爲父母是在不同的線程 創建的兒童。 (Parent是QJsonRpcTcpServer(0x4c1b38),父母的線程是 的QThread(0x4a8d98),當前線程的QThread(0x47e348)
Qt的子系統等創建額外的線程,他們中的一個UI線程等一些網或存在交集或別的東西。該程序不正常。工作後(TCP客戶端connect
和謊言,直到程序沒有關閉)
什麼是可能的載體來調試問題?
Window::Window(QWidget *parent) {
Service* service = new Service(parent);
QJsonRpcTcpServer* rpcServer = new QJsonRpcTcpServer(parent);
rpcServer->addService(service);
// problem at next line:
if (rpcServer->listen(QHostAddress::Any, 42123)) {
}
}
一些新的信息,當我替換QJsonRpc時TcpServer與QTcpServer然後在listen()
警告呼叫消失。
一些更多的新信息,問題是在Windows上。在FreeBSD上構建和運行是可以的 - 沒有錯誤並按預期工作。
在調試器中運行您的應用程序,並在新線程的產生中添加斷點;確切的方法取決於您使用的調試器。 –
只是不要將父母設置爲Sevice和QJsonRpcTcpServer。使用'connect(parent,&QObject :: destroyed,obj,&QObject :: deleteLater);'調用釋放內存 –
@DmitrySazonov,該信號很有用,但對於所有不以QObject派生的純C++對象開始的情況, – AlexanderVX