マルチスレッドサーバーがあります(QTcpServerを継承します)。新しい接続が表示されたら、新しいタスクを作成し(QRunnableを継承)、ソケット記述子をコンストラクターに渡し、このタスクをQThreadpool(3つのワーカーを持つ)にプッシュします。
QThreadPool::globalInstance()->start(task);
run()で、QTcpSocketを動的に作成し、ソケット記述子を設定して、最初に受信したバイトを読み取ります。このバイトの値に基づいて、新しい特定のタスクを作成し(QRunnableも継承します)、以前に作成したQTcpSocketオブジェクトへのctrポインターを渡し、このタスクをQThreadpoolにプッシュします。
この特定のタスクにより、ルーチンとアプリがクラッシュします。ログファイルから、この特定のタスクのデストラクタが呼び出されたことがわかります。
また、QtCreatorは次のエラーメッセージをスローします。
QObject:別のスレッドにある親の子を作成できません。(親はQNativeSocketEngine(0x18c62290)、親のスレッドはQThread(0x18c603e0)、現在のスレッドはQThread(0x18cc3b60)QSocketNotifier:ソケット通知機能を別のスレッドから無効にすることはできませんQCoreApplication :: sendEvent:"が所有するオブジェクトにイベントを送信できません別のスレッド。現在のスレッド18cc3b60。レシーバー''(タイプ'QNativeSocketEngine')はスレッド18c603e0 "、ファイルkernel / qcoreapplication.cpp、行420で作成されました。
同様の投稿を見つけましたが、残念ながら問題の解決方法がわかりませんでした。私を助けてください。