怎样在系统中只起动一个程序,即在系统的进程中只看到一个程序?

jerry_cao 2003-09-15 10:09:34
我有一台win server,有两台终端通过win客户端连接进来,但我只能让一台终端启动程序,而不能让两台终端同时启动程序,或让一台终端启动两个实例,我该怎样做,Help me!
...全文
25 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
congliu 2004-03-09
  • 打赏
  • 举报
回复
gz
eccalc 2004-03-09
  • 打赏
  • 举报
回复
互斥对象的方法不错!
不过它也有一定的缺陷,即在应用程序非法退出时,下一次就可能会被系统误解为已经有一个实例在运行,通常处理是重启计算机,这一点碰的不多。
一般处理:
设立两个变量,第一个是运行标志:程序启动时为true,关闭为false;另一个是正常退出标志:启动时为flase,在程序退出时设置为true;即正常退出时它能还原true值。
在程序启动时同时检测两个变量。发现正常退出标志为false时,无论运行标志如何,照样启动它,然后处理运行标志让它恢复正常!
asimpleman 2004-03-08
  • 打赏
  • 举报
回复
up
oceankang 2003-09-15
  • 打赏
  • 举报
回复
CreateMutex(NULL,false,"大客户信息管理系统");
ErrCd = GetLastError();
if(ErrCd == ERROR_ALREADY_EXISTS)
{
Application->MessageBox(" 程 序 已 经 运 行!"," 警 告",MB_ICONSTOP);
return 0;
}
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
禁止让一台终端启动两个实例,可以用互斥。至于在服务端判断当前终端数量,如果是自己的程序,在socket连接中可以搞定。
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
禁止一台终端启动两个实例,这个可以用互斥。
baggio_zyj 2003-09-15
  • 打赏
  • 举报
回复
创建一个互斥对象:
createmutex(....);
用法自己查吧!
asimpleman 2003-09-15
  • 打赏
  • 举报
回复
gz
swites 2003-09-15
  • 打赏
  • 举报
回复
楼上大家说的对!
zhpsam109 2003-09-15
  • 打赏
  • 举报
回复
学习!
zihan 2003-09-15
  • 打赏
  • 举报
回复
如何防止一个没有窗体的WINDOWS程序的重复运行?
用互斥(Mutex),Mutex本来是多线程同步用的,防止
多个线程访问同一资源而引发冲突。用CreateMutex可以
创建Mutex对象,实质上是一个kernel对象。

在任何Win32程序(包括GDI和Console)的启动部分加上
以下代码(Console程序的main函数、MFC程序的CWinApp
派生类的InitInstance成员函数、RawSDK程序的WinMain
函数):
hMutex=CreateMutex(
NULL,//nosecurityattributes
FALSE,//initiallynotowned
"RunOnlyOneInstance");//命名Mutex是全局对象
//在所有的process都可以访问到

if(hMutex==NULL||
ERROR_ALREADY_EXISTS==::GetLastError()){
//程序第二次或以后运行时,会得到Mutex已经创建的错误
returnFALSE;
}
嘿嘿,是不是不用FindWindow优雅简洁多了?

另外,如果要限定程序同时可运行n个实例怎么办?
Tips:用信号量(Semaphore)。



13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧