我有一个客户端应用程序(C ++,Windows),可以打开套接字,连接到服务器,发出请求,接收响应和通知。它在本地记录和保存首选项。如果我尝试运行此应用程序的多个实例(目前已被阻止)可能会出现什么问题?
答案 0 :(得分:3)
您是否遇到了一个特别的问题? ie - 当你执行第二个实例时应用程序崩溃了吗?
根据您的描述,如果第二个应用程序
,您可能无法打开可执行文件除此之外,还需要更多细节。
答案 1 :(得分:2)
如果您的应用程序正在打开侦听端口,则只有一个实例可以使用该特定端口。如果应用程序连接到远程主机,操作系统将始终选择下一个可用端口,以便在这种情况下可以并行运行多个实例。
如果所有实例共享相同的日志和/或配置文件,则并行写入可能会破坏这些文件,因此写入操作应受某些同步对象(例如互斥锁)的保护。
答案 2 :(得分:2)
听起来有点像Web浏览器;)
与典型的Web浏览器一样,如果您的应用程序正确实现,您将能够正常运行多个实例。
不幸的是,有一些方法可以破坏实现,例如:
Etc等......基本上只要有共享资源(无论是文件系统,网络,CPU,内存,屏幕还是其他),在同时使用它时都必须小心。
答案 3 :(得分:1)
根据问题,我认为你的意思是多个应用程序都不会为日志记录和首选项创建自己的工作区。这会导致一个实例覆盖并访问另一个实例所产生的数据,从而导致不希望的,不可预测的结果。
如果您有权访问应用程序的源代码,我建议扩展应用程序以创建一个名称包含时间戳的文件夹加上用于保存会话数据的randon编号 - 即日志和首选项。这样,多个实例可以在不相互干扰的情况下运行。
但请记住,某些首选项可能最适合全局 - 以节省您每次加载新实例时必须设置首选项。这取决于您的应用程序以及它们对这些全局偏好的作用。
如果您无权访问源,那么多个实例的另一个选项将是虚拟化,在同一台机器上运行操作系统,每个操作系统运行一个应用程序实例。