gpt4 book ai didi

c++ - QTcpSocket及删除

转载 作者:可可西里 更新时间:2023-11-01 02:35:49 27 4
gpt4 key购买 nike

我正在使用 Qt 编写基于 tcp 的服务器。

我计划这个服务器是多线程的,所以我的 tcpserver 类继承自 QTcpServer并覆盖 incomingConnection() .一切都很好,除了删除用户。

TcpServer类(class)管理QSharedPointer<Client> 的列表.当我从列表中删除所述客户端时,由于智能指针,它会自动删除。 我的客户类拥有一个 QSharedPointer<QTcpSocket>这意味着客户的 QTcpSocket当客户端被删除时被删除。

问题是,似乎 Qt 在删除后尝试使用此套接字,导致段错误。

我是否应该只管理套接字列表,然后调用 deleteLater()当我不再需要它们时? 或者我应该将客户端类中的套接字指针切换为普通指针吗?

void SlotSocketError(void)
{
QTcpSocket sock = qobject_cast<QTcpSocket *>(QObject::sender());
QSharedPointer<Client> client = GetClientFromSocket(sock);

_clientList.removeAt(GetClientPositionInList(client));
}

QList<QSharedPointer<Client> > _clientsList; // From TcpServer header.

/* Client's class header */
QSharedPointer<QTcpSocket> _socket;

最佳答案

您需要对对象使用 deleteLater。删除 QTCPSocket 后,传入消息可能会进来。它记录在助手中。你可以在这里找到一个例子:qthelp://com.trolltech.qt.472/qdoc/qt4-network.html

中号

关于c++ - QTcpSocket及删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com