2012-04-04 15 views
1

私は基本的なマルチスレッドTCPサーバーを作成しました。接続されたすべてのクライアントにデータを送信したいと思います。私はサーバクラスのシグナルwriting(QByteArray)をソケットスレッドのスロットwriteToSocket(QByteArray)に接続しましたが、上記のシグナルを出してそのソケットに書き込もうとすると、セグメント化エラーが発生します。それは、どのソケットオブジェクト(スレッドのプロパティ)にもアクセスできないようなものです。Qtソケット書込みセグメンテーションフォールト

私の簡素化コード:

void MyServer::incomingConnection(int handle) 
{ 
ConnectionThread *thread = new ConnectionThread(handle, this); 
connect(this, SIGNAL(writing(QByteArray)), thread, SLOT(writeToSocket(QByteArray))); 
// Some more code necessary for thread to work 
} 

void RoleNetServer::WriteToAll(QByteArray data) 
{ 
    emit writing("test"); 
} 

その後、スレッドのソース・ファイル内:

void ConnectionThread::writeToSocket(QByteArray data) // a slot 
{ 
    this->socket->write(data); 
} 
+0

1つのクライアントのみで実行することでスレッドの問題を排除してください。あなたのバッファよりも長いデータ長を渡しているだけかもしれません。できるだけ[SSCCE](http://sscce.org/)を投稿してください。バックトレースも役に立ちます。 – je4d

答えて

0

ジャストアイデア。私は多分間違っている。

新規/削除はC++ではスレッドセーフではありません。これがC++ 0xに当てはまるかどうかは不明です。私はこの問題をpthreadsで遭遇しました。

新しく割り当てられたメモリを使用すると、構文が正しくてもセグメンテーションフォルトが発生する可能性があります。可能であれば、それをスレッド/スレッド関数に割り当ててみてください。

希望すると、これが役立ちます。

関連する問題