我想使用不使用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中使用异步方式?
编辑:下面是一个包含基本知识的版本:
void MyThread::run()
{
QEventLoop eventLoop;
m_server = new QLocalServer();
m_server->listen("ExamplePipe");
connect(m_server, &QLocalServer::newConnection, &eventLoop, []()
{
// not triggered
});
eventLoop.exec();
}致以敬意,
发布于 2020-04-28 05:40:49
我让它起作用了
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();
}https://stackoverflow.com/questions/61464874
复制相似问题