首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止打开应用程序的多个实例的跨平台方法

防止打开应用程序的多个实例的跨平台方法
EN

Stack Overflow用户
提问于 2017-03-19 02:44:51
回答 2查看 1.3K关注 0票数 0

这些问题包括How to block running two instances of the same program?How to create a single instance application in C or C++Preventing multiple instances of my application如何防止为平台(WindowsLinux)打开同一个应用程序的多个实例。

是否有一个跨平台的方法来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-19 02:45:14

回答我的问题,因为我没有在其他问题中找到其他人来解决这个问题。

这可以通过跨平台的方式使用boost/interprocess/sync/named_mutex来实现(我使用了boost 1.63)

我在LinuxWindows上进行了测试,实现防止打开应用程序的第二个实例。

我发现的问题是,如果我杀死进程(在两个平台上),互斥对象就不会被删除,因为析构函数~MyApplication没有被调用。因此,只有在系统重新启动之后,我才能再次运行应用程序。

代码语言:javascript
复制
#include <boost/interprocess/sync/named_mutex.hpp>
#include <iostream>

class MyApplication
{
public:
    MyApplication() = default;

    ~MyApplication()
    {
        if (mLockedByThisInstance)
        {
            boost::interprocess::named_mutex::remove("myApplicationMutex");
        }
    }

    bool IsAlreadyRunning()
    {
        mLockedByThisInstance = mNamedMutex.try_lock();

        if (!mLockedByThisInstance)
        {
            return true;
        }

        return false;
    }

    int Run(int argc, char *argv[])
    {
        // Application main loop            
        return 0;
    }

private:
    bool mLockedByThisInstance = false;
    boost::interprocess::named_mutex mNamedMutex{ boost::interprocess::open_or_create,
        "myApplicationMutex" };
};

int main(int argc, char *argv[])
{
    MyApplication myApplication;

    if (myApplication.IsAlreadyRunning())
    {
        std::cout << "MyApplication is already running!\n";
        return 1;
    }

    return myApplication.Run(argc, argv);
}
票数 0
EN

Stack Overflow用户

发布于 2017-03-19 04:19:35

这并不是一个完整的答案,但是要查看一些内容,比如保存特定的文件句柄以进行独占访问。您可以像互斥一样使用它,但是操作系统应该自动“清理”进程终止时的句柄。

我不能告诉您,这在Linux上是否有效,但至少在Windows上,这应该会使您达到同样的效果。希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42882349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档