use*_*023 7 c++ qt multithreading
我正在尝试使用QLocalServer作为ipc解决方案.qt的版本是4.6
这是我的main.cpp:
int main(int argc, const char*argv[]) {
QServer test();
while (true) {
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的QServer类:
class QServer : public QObject
{
Q_OBJECT
public :
QServer ();
virtual ~QServer();
private :
QLocalServer* m_server;
QLocalSocket* m_connection;
private slots:
void socket_new_connection();
};
QServer::QServer()
{
m_server = new QLocalServer(this);
if (!m_server->listen("DLSERVER")) {
qDebug() << "Testing";
qDebug() << "Not able to start the server";
qDebug() << m_server->errorString();
qDebug() << "Server is " << m_server->isListening();
}
connect(m_server, SIGNAL(newConnection()),
this, SLOT(socket_new_connection()));
}
void
QServer::socket_new_connection()
{
m_connection = m_server->nextPendingConnection();
connect(clientConnection, SIGNAL(readyRead()),
this, SLOT(newData(clientConnection)));
}
Run Code Online (Sandbox Code Playgroud)
这都是编译,但是在运行时,当我尝试连接newConnection()时,我得到一个QSocketNotifier:只能用于以QThread错误启动的线程.
我试过在QThread中包装这整个东西,但我仍然遇到了同样的错误.
任何人都可以解释我做错了什么或为什么甚至涉及一个线程?
Tom*_*ing 12
错误消息具有误导性.您需要一个Qt事件循环才能使用QSocketNotifier.在您的应用程序中执行此操作的适当方法是创建QApplication(或者如果您不想要任何图形内容,则需要QCoreApplication).你的主要应该是这样的:
int main(int argc, char** argv)
{
QCoreApplication app(argc, argv);
QServer test();
app.exec();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
QCoreApplication :: exec()启动事件循环(它取代了你的while (true) {}循环).
| 归档时间: |
|
| 查看次数: |
5550 次 |
| 最近记录: |