通信スレッドの構造がマズイらしい…
データ通信のチェックを始めました。
で、サーバへの接続を実行するとすぐエラーとなりました(;ω;)
$ ./release/qtbrynhildr.exe
[ControlThread] start thread...
[GraphicsThread] start thread...
[SoundThread] start thread...
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTcpSocket(0x3928c50), parent's thread is QThread(0x1ffbe08), current thread is brynhildr::ControlThread(0x3918b30)
現在のスレッドはControlThreadだけど, QTcpSocketが違うスレッドに属してますよ、と怒られました。
QThreadを継承したControlThreadは、メインスレッドで生成しますが、その際にQTckSocketも生成していました。そのため、QTcpSocketはメインスレッドに属するものとなっていたようです。
これを回避するにはQTcpSocketの実体をメインスレッドでなくControlThreadで生成する必要があります。
具体的には、ControlThreadにはQTcpSocketへのポインタのみを生成しておきます。で、通信を始める時に動的にQTcpThreadを生成し、通信を閉じる時に削除するように変更します。
スレッドはやっぱりいろいろ考慮しなければいけないことが多くて面倒ですね。
« スレッド起動までは出来たのですが | トップページ | Andoroidへの道 »
コメント