multithreading - QThread中的QTcpSocket

标签 multithreading qt qthread

我有简单的服务器连接线程。当您调用函数receiveString时,它将失败。但是,当您在run()中执行相同的代码时,它将成功。函数receiveString需要什么?

我都尝试过

bool TestServerThread::receiveString(QTcpSocket& sock, QString& str)
bool TestServerThread::receiveString(QTcpSocket* sock, QString& str)

实际代码:
TestServerThread::TestServerThread(int socketDescriptor, QObject *parent) : QThread(parent), socketDescriptor(socketDescriptor)
{
}


bool TestServerThread::receiveString(QTcpSocket& sock, QString& str)
{
    if(sock.isValid())
    {
        if(!sock.waitForReadyRead(30))
        {
            qWarning() << "fail"; // fails here
            return false;
        }
        QByteArray buf = sock.readAll();
        str = buf;
    }
}

void TestServerThread::run()
{
    QTcpSocket sock;
    if (!sock.setSocketDescriptor(socketDescriptor)) {
        emit error(sock.error());
        return;
    }

    bool ok = true;
    while(ok)
    {
        QString str;
        //if(ok) ok = receiveString(sock, str);

        if(!sock.waitForReadyRead(30))
        {
            qWarning() << "false";
        }
        QByteArray buf = sock.readAll(); // same routine succeeds
        str = buf;
        qWarning() << str;

        qWarning() << "Received: " << str;
        if(ok) ok = sendString(sock, "kaka");
    }
    sock.disconnectFromHost();
    sock.waitForDisconnected();
}

最佳答案

您的代码破坏了进程堆栈,或者超时值不够。

关于multithreading - QThread中的QTcpSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1543582/

相关文章:

c++ - 使用线程本地存储将具有全局变量的单线程遗留代码转换为多线程代码

c++ - 使用QT和QOGL的多线程崩溃

c++ - 依赖网络时的 Qt 测试

c++ - 使用 QRegExp 过滤程序参数

c++ - Qt线程和循环问题

python - 如何在 kivy-python 中使用带多线程的时钟对象更新进度条?

c - 多线程信号量程序

c++ - Qt 多线程通信

c++ - 显示功能状态的 QT 进度条

c++ - qapps运行良好但断点有时会产生段错误