首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QLocalServer创建50个同名命名管道

QLocalServer创建50个同名命名管道
EN

Stack Overflow用户
提问于 2022-08-24 16:23:36
回答 1查看 29关注 0票数 0

我编写了一个小程序,它嗅探设备控制软件与其硬件的串行通信,并提取测量值以发送给我的应用程序,该应用程序控制该测试系统的其他功能。对于这个嗅探器和我的应用程序之间的通信,我使用QLocalServer,它应该通过命名管道与我的应用程序进行通信。我经历过沟通非常缓慢,我想知道为什么。使用sysinternals中的process,我发现这个QLocalServer创建了50个同名命名管道。

这里是服务器的定义:

代码语言:javascript
复制
server = new QLocalServer(this);
server->setMaxPendingConnections(1);
connect(server, &QLocalServer::newConnection, this, &SSRTSniffer::connectionEstablished);

这里是侦听模式下的初始化:

代码语言:javascript
复制
void SSRTSniffer::initServer(){
qDebug() << "Init Server";
if(serverName.isEmpty())
    return;
if(server->isListening())
{
    if(clientConnected)
    {
        client->disconnectFromServer();
        do
        {
            QEventLoop loop;
            QTimer::singleShot(50, &loop, SLOT(quit()));
            loop.exec();
        } while (clientConnected);
    }
}
server->close();
if(!server->listen(serverName))
{
    qDebug() << "Could not start server";
}}

以及在建立通信时执行的代码:

代码语言:javascript
复制
void SSRTSniffer::connectionEstablished(){
qDebug() << "Connected";
clientConnected = true;
client = server->nextPendingConnection();
connect(client, &QLocalSocket::disconnected, client, &QLocalSocket::deleteLater);
connect(client, &QLocalSocket::disconnected, this, &SSRTSniffer::connectionClosed);}
EN

回答 1

Stack Overflow用户

发布于 2022-08-24 16:43:59

完全不是专家,但看起来问题可能来自异步调用singleshot()的but ()。它强制直接退出(0),如果有打开的文件、管道或其他任何东西或malloc()-ed,那么如果没有适当的清理、关闭、空闲(),所有这些都仍然存在。由于这发生在一个并发循环中,我希望每隔50 As就会有一个新管道(单参数,第一个参数)。如果你只有50个管道,你要么负责2,5s,要么你的操作系统做一些内部限制这个数字的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73476593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档