我有工作正常的服务器程序,正在监听传入的客户端。因此,我想防止它重复启动,因为我只希望一台服务器为连接的实体提供服务,如果可能的话?
问问题
304 次
3 回答
2
您可以使用QReadWriteLocklockForWriting
方法锁定特定文件,并在应用程序运行期间保持锁定状态,如果无法锁定,则退出应用程序。由于只有一个实例能够锁定文件以进行写入,因此其他实例将自行终止。
于 2013-08-28T10:30:15.727 回答
0
我正在使用 QSingleApplication - 它工作得很好。
源代码:
来自那里的示例代码:
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 回答