Использование asyn c QLocalServer с QEventLoop - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу запустить 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();
}

С уважением,

1 Ответ

0 голосов
/ 28 апреля 2020

Я получил это работает:

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();
}
...