首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步QLocalServer与QEventLoop的结合

异步QLocalServer与QEventLoop的结合
EN

Stack Overflow用户
提问于 2020-04-27 17:35:45
回答 1查看 216关注 0票数 0

我想使用不使用QLocalServer的异步信号/插槽在应用程序中运行QCoreApplication。据我所知,这应该可以使用QEventLoop

代码语言:javascript
复制
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中使用异步方式?

编辑:下面是一个包含基本知识的版本:

代码语言:javascript
复制
void MyThread::run()
{
    QEventLoop eventLoop;
    m_server = new QLocalServer();
    m_server->listen("ExamplePipe");

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

致以敬意,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-28 05:40:49

我让它起作用了

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61464874

复制
相关文章

相似问题

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