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