通过QEventLoop使用异步QLocalServer

问题描述 投票:0回答:1

我想使用不使用QLocalServer的异步信号/插槽在应用程序中运行QCoreApplication。据我了解,这应该使用QEventLoop起作用:

void MyThread::startSocketServer()
{
    m_server = new QLocalServer();
    m_server->listen("ExamplePipe");

    /*
    // This works:
    m_server->waitForNewConnection(-1);
    auto socket = m_server->nextPendingConnection();
    socket->write("Test"); */

    // This signal is never triggered
    connect(m_server, &QLocalServer::newConnection, this, [this]()
    {
        auto socket = m_server->nextPendingConnection();
        connect(socket, &QLocalSocket::readyRead, this, [this, socket]()
        {
            //socket->readAll();
            //usleep(1000);
            //socket->write("Test");
        });
    });
}

void MyThread::run()
{
    QEventLoop eventLoop;
    startSocketServer();
    eventLoop.exec();
}

同步版本按预期工作。是否可以通过QLocalServer使用异步方式?

EDIT:这是具有基本知识的版本:

void MyThread::run()
{
    QEventLoop eventLoop;
    m_server = new QLocalServer();
    m_server->listen("ExamplePipe");

    connect(m_server, &QLocalServer::newConnection, &eventLoop, []()
    {
        // not triggered
    });
    eventLoop.exec();
}

问候,

qt qt-signals qlocalsocket qlocalserver
1个回答
0
投票

我知道它正在工作:

void MyThread::run()
{
    int argc = 0;
    char *argv[] = {NULL};
    m_qtApplication = new QCoreApplication(argc, argv);

    m_server = new QLocalServer();
    m_server->listen("ExamplePipe");

    connect(m_server, &QLocalServer::newConnection, m_qtApplication, []()
    {
        // works
    });

    m_qtApplication->exec();
}
© www.soinside.com 2019 - 2024. All rights reserved.