在C++11中是否有一种独立于平台的方法(boost是可用的)来确保一次只启动一个应用程序的一个实例?(我不喜欢使用"file and (f)lock“方法运行,因为它需要特定于平台的代码,但是如果没有更好的方法,我会这样做的。)
在我的场景中,没有(简单的)其他方法,比如不可用的端口,我也可以使用它作为标准。是的,我知道DOS的问题--所以没有必要指出这些问题。
我发现了以下类似的问题,建议使用带有boost的解决方案。但是,解决方案有两个问题:
shared_memory_object::remove("shared_memory");的电话(在“比赛赢了”的情况下)。但是我对boost::interprocess不是很熟悉,所以我可能错了?!我还找到了这个问题。没有回答让我兴奋。但是这是一个C++98问题,所以也许用C++11或者boost,现在有一种新的/不同的方式?
发布于 2014-09-16 10:16:29
你可以做基于boost的平台无关文件锁定。
发布于 2014-09-17 09:18:46
您可以绑定到某个端口,例如,使用ASIO:
#include <iostream>
#include <boost/asio/ip/udp.hpp>
#include <boost/asio/io_service.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::ip::udp::socket sock(io);
sock.open(boost::asio::ip::udp::v4());
boost::system::error_code ec;
sock.bind({boost::asio::ip::udp::v4(), /*your port here*/}, ec);
if (ec)
std::cout << "Not mine\n";
else
std::cout << "It's mine\n";
return 0;
}如果它成功了,那么它是第一个应用程序,否则它已经在运行。
https://stackoverflow.com/questions/25864725
复制相似问题