« スレッド起動までは出来たのですが | トップページ | Andoroidへの道 »

2014年8月27日 (水)

通信スレッドの構造がマズイらしい…

データ通信のチェックを始めました。
で、サーバへの接続を実行するとすぐエラーとなりました(;ω;)

$ ./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への道 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 通信スレッドの構造がマズイらしい…:

« スレッド起動までは出来たのですが | トップページ | Andoroidへの道 »