首页
社区
课程
招聘
[求助]能够不能够实现只让一台机器上运行10个实例
发表于: 2006-8-10 21:04 9248

[求助]能够不能够实现只让一台机器上运行10个实例

2006-8-10 21:04
9248
收藏
免费 0
支持
分享
最新回复 (33)
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
26
进程之间是相互隔离的,如果不共享的话,每个进程都会有它们自已的Mutex1~Mutex10,所以这种方法也是不行的,
2006-8-17 23:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
最初由 testttt 发布
如果某个进程非正常结束,那就......


如果考虑进程非正常结束造成计数器不减少的话可以考虑在进程启动时遍历一下该实例的所有进程,然后相应的确认一下计数器的值,这样是不是程序启动太慢了?呵呵

或者设计一个结构,如:
struct ShareData
{
    long InstanceCounter = 0;
    HANDLE s_hInstance = NULL;
}

类似这样的方式,就是不知道一个进程异常退出后,相应的资源如进程句柄是否被释放,如果被释放了就好办了,只要判断s_hInstance是否有效就行了

个人愚见。
2006-8-18 11:40
0
雪    币: 209
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
最初由 thinkSJ 发布
进程之间是相互隔离的,如果不共享的话,每个进程都会有它们自已的Mutex1~Mutex10,所以这种方法也是不行的,


既然论坛的常务也这样说,我只好无言了
2006-8-18 21:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
按道理用9楼方法应该可行的,共享段中的计数器在DLL_PROCESS_ATTACH/DLL_PROCESS_DETACH中加一或减一,即使程序异常终止,最终都会由操作系统卸载这个DLL,那么引用计数的值都会得到正确更新;

采用25楼的方法,也就是使用信号量的方法,在采用内核对象的方法中应该是最合适的,但程序异常终止的情况将会很难预料,有可能信号量不会正确减一,不过或许可以尝试装载全局异常处理的方式,不过我没有去验证。
2006-9-5 03:16
0
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
30
9楼用共享节的方法不错,但若异常退出则计数器就不准了
我的解决方法:保存所有已正常启动的进程的PID,初始化时检测所有PID所在进程是否存在,若存在则检测该PID的进程的进程名是否是我们的程序................
2006-11-28 01:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
提供一种最基体的解决方法:在硬盘上建个文件来计数。 (还能附带解决很多共享问题)
2006-11-28 15:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
以计数方式统计进程的运行个数不是完善的?最好的是完全查找系统的进程文件名再行统计(假如用统一文件名,在同一路径下....)
2006-11-28 16:31
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
高手怎么都不会呀 这是不是有点不同寻常   呵呵
是不是高手都在睡觉
2006-11-28 17:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NIU
34
信号灯对象(或叫信号量),就这么回事!
2006-11-28 17:46
0
游客
登录 | 注册 方可回帖
返回
//