0

我有工作正常的服务器程序,正在监听传入的客户端。因此,我想防止它重复启动,因为我只希望一台服务器为连接的实体提供服务,如果可能的话?

4

3 回答 3

2

您可以使用QReadWriteLocklockForWriting方法锁定特定文件,并在应用程序运行期间保持锁定状态,如果无法锁定,则退出应用程序。由于只有一个实例能够锁定文件以进行写入,因此其他实例将自行终止。

于 2013-08-28T10:30:15.727 回答
0

我正在使用 QSingleApplication - 它工作得很好。

源代码:

http://qt.gitorious.org/qt-solutions/qt-solutions/source/4ac977553f2b04a54feb74ebcbc90ef255d38895:qtsingleapplication

来自那里的示例代码:

int main(int argc, char **argv)
{
    report("Starting up");

    QtSingleCoreApplication app(argc, argv);

    if (app.isRunning()) {
        QString msg(QString("Hi master, I am %1.").arg(QCoreApplication::applicationPid()));
        bool sentok = app.sendMessage(msg, 2000);
        QString rep("Another instance is running, so I will exit.");
        rep += sentok ? " Message sent ok." : " Message sending failed; the other instance may be frozen.";
        report(rep);
        return 0;
    } else {
        report("No other instance is running; so I will.");
        MainClass mainObj;
        QObject::connect(&app, SIGNAL(messageReceived(const QString&)),
                         &mainObj, SLOT(handleMessage(const QString&)));
        return app.exec();
    }
}
于 2013-08-28T09:12:42.850 回答
0

您可以使用同步原语
例如:名为 mutex
当应用程序启动时,它会检查是否存在具有给定名称的互斥锁,如果存在,它会通知用户只允许一个实例并且它已经在运行,如果不存在 - 应用程序启动

于 2013-08-28T10:01:39.013 回答