Qt套接字写分段故障

时间:2012-04-04 21:06:42

标签: c++ qt tcp

我已经创建了一个基本的多线程TCP服务器,我想将数据发送到所有连接的客户端。我已经将服务器类'signal 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);
}

1 个答案:

答案 0 :(得分:0)

只是一个想法。我可能错了。

新的/删除在C ++中不是线程安全的。不确定C ++ 0x是否仍然如此。我用pthreads遇到了这个问题。

如果你使用new分配的内存,即使语法似乎正确,也会引发分段错误。如果可能的话,尝试在线程/线程函数中分配它。

希望这会对你有所帮助。