基本的なマルチスレッド TCP サーバーを作成しました。接続されているすべてのクライアントにデータを送信したいと考えています。サーバークラスのシグナルwriting(QByteArray)
をソケットスレッドのスロットwriteToSocket(QByteArray)
に接続しましたが、上記のシグナルを発行してそのソケットに書き込もうとすると、セグメンテーション違反が発生します。ソケット オブジェクト (スレッドのプロパティ) のメソッドにアクセスできないのと同じです。
私の簡略化されたコード:
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);
}