我使用Qt和QTcpServer
创建了一个服务器。它在后台运行,不显示任何窗口,但它使用事件循环。
我的main.cpp看起来像这样:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyServer theServer;
return a.exec();
}
如何在不诉诸TerminateProcess()
的情况下通知我的服务器关闭?我只使用Windows解决方案,所以如果需要,我可以使用WINAPI函数。
答案 0 :(得分:2)
根据服务器的用途,当您使用TCPServer时,您可以向其发送一条消息告诉它退出,但您可能需要验证发送该消息的人。
或者,在同一台计算机上安装一个控制器应用程序,它可以通过命名管道与服务器通信,您可以使用它来告诉它退出。
答案 1 :(得分:2)
我刚使用QLocalServer
实现了它。结果很简单:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
static const char *quitSignalName = "My Service Quit Signal";
const QStringList &args = a.arguments();
if (args.size() == 2 && args[1] == "--shutdown") {
// Connect to the named pipe to notify the service it needs
// to quit. The QLocalServer will then end the event loop.
QLocalSocket quitSignal;
quitSignal.connectToServer(quitSignalName);
quitSignal.waitForConnected();
return 0;
}
// Listen for a quit signal, we connect the newConnection() signal
// directly to QApplication::quit().
QLocalServer quitSignalWatcher;
QObject::connect(&quitSignalWatcher, SIGNAL(newConnection()), &a, SLOT(quit()));
quitSignalWatcher.listen(quitSignalName);
MyServer theServer;
Q_UNUSED(theServer);
return a.exec();
}