Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QTcpServer在QRunnable中工作时未接收任何数据_C++_Qt - Fatal编程技术网

C++ QTcpServer在QRunnable中工作时未接收任何数据

C++ QTcpServer在QRunnable中工作时未接收任何数据,c++,qt,C++,Qt,在典型场景中,我遇到了一个奇怪的问题:qtcserver的方法incomingConnection在自定义类中被重写,任何接收到的连接都计划在QThreadPool上的单独线程中处理 服务器: void FooS::incomingConnection(qintptr socketDescriptor) { QThreadPool *thread_pool = QThreadPool::globalInstance(); FooSocket *fs = new FooSocke

在典型场景中,我遇到了一个奇怪的问题:qtcserver的方法incomingConnection在自定义类中被重写,任何接收到的连接都计划在QThreadPool上的单独线程中处理

服务器:

void FooS::incomingConnection(qintptr socketDescriptor)
{

    QThreadPool *thread_pool = QThreadPool::globalInstance();
    FooSocket *fs = new FooSocket();
    fs->setSocket(socketDescriptor);
    thread_pool->start(fs);
}
任务:

class-FooSocket:public-QObject,public-QRunnable;
...
专用插槽:
无效连接incomingdata();
...
void FooSocket::run(){
QTcpSocket*套接字=新的QTcpSocket();
qDebug()移动到线程(QThread::currentThread());
连接(套接字,信号(readyRead()),此,插槽(connectionIncomingData());
连接(插座,信号(断开()),此,插槽(连接关闭());
}
未触发readyRead信号,但已确认套接字客户端(tcpdump)发送数据


在使QRunnable生成一个内部包含套接字逻辑的QThread对象,并玩弄setAutoDelete之后,moveToThread-仍然无效。

为了在
QRunnable
中处理事件,线程需要有自己的事件循环,它不能依赖主线程的事件循环。从代码中显示的情况来看,线程会快速启动,然后退出,而无需运行循环

尝试添加

QEventLoop loop;

// connect a signal to the event loop's quit() slot

loop.exec();
QEventLoop loop;

// connect a signal to the event loop's quit() slot

loop.exec();