1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include "qsoleapplication.h"
- #include <QLocalSocket>
- #include <QLocalServer>
- #include <QFile>
- #include <QDebug>
- #include <QDateTime>
- QSoleApplication::QSoleApplication(int &argc, char **argv)
- :QApplication(argc,argv)
- {
- }
- QSoleApplication::~QSoleApplication()
- {
- }
- bool QSoleApplication::isRunningSameApp()
- {
- QString serverName = QCoreApplication::applicationName();
- qDebug()<<QDateTime::currentDateTime()<<"new"<<serverName;
- QLocalSocket socket;
- socket.connectToServer(serverName);
- if (socket.waitForConnected(500))
- { //如果能够连接得上的话,将参数发送到服务器,然后退出
- qDebug()<<QDateTime::currentDateTime()<<"Connected To Socket";
- QTextStream stream(&socket);
- QStringList args = QCoreApplication::arguments();
- if (args.count() > 1)
- stream << args.last();
- else
- stream << QString();
- stream.flush();
- socket.waitForBytesWritten();
- //qApp->quit();
- return true;
- }
- //运行到这里,说明没有实例在运行,那么创建服务器。
- m_localServer = new QLocalServer(this);
- connect(m_localServer, SIGNAL(newConnection()),
- this, SLOT(newLocalSocketConnection())); //监听新到来的连接
- if (!m_localServer->listen(serverName))
- {
- if (m_localServer->serverError() == QAbstractSocket::AddressInUseError
- && QFile::exists(m_localServer->serverName())) { //确保能够监听成功
- QFile::remove(m_localServer->serverName());
- m_localServer->listen(serverName);
- }
- }
- return false;
- }
- void QSoleApplication::newLocalSocketConnection()
- {
- QLocalSocket *socket = m_localServer->nextPendingConnection();
- if (!socket)
- return;
- socket->waitForReadyRead(1000);
- //QTextStream stream(socket);
- //其他处理
- emit newSocketConnect();
- qDebug()<<"newSocketConnect";
- delete socket;
- }
|