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

jerry_cao 2003-09-15 10:09:34
我有一台win server,有两台终端通过win客户端连接进来,但我只能让一台终端启动程序,而不能让两台终端同时启动程序,或让一台终端启动两个实例,我该怎样做,Help me!
...全文
30 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)。



 本课程的主题是: 透析Linux系统编程    不同于市面上的课程,只会把核心主题放到函数的讲解,本课程的核心主题是 Linux系统编程的经验总结 ;    当你在系统编程,调用一个系统调用来解决问题时,是否考虑过 该系统调用是否会对系统性能带来影响?是否还有最优的方式?    当你在系统编程过程,遇到问题,是否只是检查代码逻辑,而不会去深入底层去查找问题 ?    本课程将一一解决系统编程带给你的难点,疑点?    比如控制文件IO章节,给出系统文件操作的默认行为,应用如何修改这些行为,给出文件IO操作的最优方式;   比如系统调用,给出系统调用原理;系统调用的正确使用方式等   比如进程实现,结合底层,对比线程,深入理解两者;给出进程使用经验总结;   比如线程同步,不仅引出互斥锁 条件变量 自旋锁 读写锁使用方式,同时给出各个机制的应用场景 ;   比如 进程间通信,引出各个进程间通信的机制原理,给出各个进程间通信的应用场景;   比如 信号,给出信号在进程信号处理处理函数的正确使用方式,给出在多线程信号处理的正确方式;   比如 共享库,给出共享库的实现机制,给出共享库的正确使用方式;   同时 会讲解 系统安全问题 ; 可执行程序的静态布局和动态布局 ;灵活使用内存映射和虚拟内存;系统事件跟踪;   给出程序性能的调优思路;    丰富的项目实例讲解 ,提供宝贵的商业项目开发经验 ; 
课程简述  Android是目前最为流行的移动操作系统之一,它的开发涉及到多个知识领域。本课程将深入介绍Android系统启动过程的重要组成部分——init进程,并探讨与之相关的多项关键技术。我们还将提供实际的开发案例,以RK3399开发板为例,通过演示Android产品配置、init启动流程、selinux权限管理、init.rc启动脚本定制等实际案例,让学员深入理解这些技术在实际产品开发的应用场景和实现方法,提高学员的实际开发能力和经验,从而更好地应对实际产品开发遇到的问题和挑战。知识运用方向学习Android启动方面的知识,可以参与如下实际开发工作项:启动流程定制: 根据产品需求调整Android启动流程,包括修改init.rc脚本、修改启动顺序和等待时间、加入自定义服务等。属性系统定制: 通过Android属性系统定制化启动流程,例如增加产品版本信息、定制开机音量等。日志系统分析: 掌握日志的捕捉、分析和排错技术,在启动过程,需要加入调试信息来方便开发人员进行调试,同时需要进行日志的优化,避免日志输出过多占用过多的系统资源。selinux安全策略定制:在Android系统,selinux是一种安全机制,用于保护系统的敏感资源和数据。在实际开发,可能需要对selinux策略进行定制,以确保系统的安全性和稳定性。课程内容主要内容简述1, RK3399 开发板操作这部分内容重点介绍如何在FIreFly开发板上将Android 10系统运行起来, 包含编译FireFly的Android源码下载和编译, 镜像烧录运行,内核和模块编译,以及RK3399内核启动init进程的过程。2, 产品定制这部分讲解获取到方案商或者原厂提供的源码后, 如何定制一个新的产品,产品配置文件和模型, 原始代码的配置文件和定制化东西3, Android日志代码编写之前讲过Android的日志系统, 并没涉及到代码编写, 这个部分重点讲解C/C++, java代码编写日志的API和代码4, 属性系统在Android,属性使用的非常频繁的,可以用来作为进程间通信,也可以用于一些行为控制, 这个部分会重点介绍属性系统框架, API接口, 属性文件等知识点5,selinux进程对文件进行访问时,Android 4.3就开始集成了selinux权限管控, 如果需要启动某个脚本或者服务, selinux的配置就避免不了,并且Android8之后, Android系统进程访问的权限管控的非常严格。6, init.rc脚本Android定义的一种脚本, 改脚本是有init进程启动, 是非常重要的一个脚本, 会包含系统的其他很多脚本, 在我们系统开发时, 我们经常通过这个脚本进行一些定制化动作。7, init进程代码分析想要了解一个系统,就必须对源码进行分析和理解, 这个章节,带大家去跟读init进程代码, 这样,换了另外一个Android版本,完全就可以去读代码, 知道有什么变化。 
千里马8年Android系统及应用开发经验,曾担任过美国unokiwi公司移动端技术总监兼架构师,对系统开发,性能优化,应用高级开发有深入的研究,Android开源定制ROM Lineage的贡献者之一,国内首家线下开辟培训Android Framework课程,拥有2年的Android系统培训经验。成为腾讯课堂专业负责android framework课程分享第一人,致力于提高国内android Framework水平Android Framework领域内是国内各大手机终端科技公司需要的人才,应用开发者都对Android系统充满着好奇,其的binder是重之重,都说无binder无Android,binde是Android系统的任督二脉。课程水平循序渐进,由级再到高级,满足各个层次水平的android开发者。1、灵活使用binder跨进程通信,在app端对它的任何api方法等使用自如2、可以单独分析android系统源码任何binder部分,分析再也没有难度3、掌握binder驱动本质原理,及对应binder驱动怎么进行跨进程通信,及内存等拷贝方式数据等4、对binder从上层的java app端一直到最底层的内核binder驱动,都可以顺利理通5、针对系统开发过程遇到的binder报错等分析方法,及binder bug案例学习6、针对面试官任何的binder问题都可以对答自如7、socket这种跨进程通信实战使用8、针对android源码使用的socket源码轻松掌握9、android系统源码最常见的socketpair双向跨进程通信10、使用socket实现一个可以让app执行shell命令的程序
Linux系统提供了各种系统调用API用于进程之间的通信:    无名管道PIPE    命名管道FIFO    消息队列    共享内存    信号量    文件锁    信号signal....其还包括system V和POSIX 两种接口标准,除此之外,Linux系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。本视频教程为《Linux系统编程》第05期,本期课程将会带领大家学习Linux下将近15种进程间通信IPC工具的使用,了解它们的通信机制、编程实例、使用场景、内核的实现以及各自的优缺点。本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载嵌入式自学路线指导图:------------------------------------------------------------------------------------------------------                   《嵌入式工程师自我修养》嵌入式自学系列教程                                          作者:王利涛------------------------------------------------------------------------------------------------------一线嵌入式工程师精心打造,嵌入式学习路线六步走: 第 1 步:Linux三剑客零基础玩转Linux+UbuntuGit零基础实战:Linux开发技能标配vim从入门到精通基础篇:零基础学习vim基本命令vim从入门到精通定制篇:使用插件打造嵌入式开发IDEmakefile工程实践基础篇:从零开始一步一步写项目的Makefilemakefile工程实践第2季:使用Autotools自动生成Makefile软件调试基础理论printf打印技巧Linux内核日志与打印使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境第 2 步:C语言嵌入式Linux高级编程第1期:C语言进阶学习路线指南第2期:计算机架构与ARM汇编程序设计第3期:程序的编译、链接和运行原理第4期:堆栈内存管理第6期:数据存储与指针第7期:嵌入式数据结构与Linux内核的OOP思想第8期:C语言的模块化编程第9期:CPU和操作系统入门      搞内核驱动开发、光会C语言是不行的!      你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、linux内核的面向对象思想、嵌入式系统架构、C语言的模块化编程.....第 3 步:Linux系统编程第00期:Linux系统编程入门第01期:揭开文件系统的神秘面纱第02期:文件I/O编程实战第03期:I/O缓存与内存映射第04期:打通进程与终端的任督二脉第05期:进程间通信-------------------we are here!‍    第 4 步:Linux内核编程‍    练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。第 5 步:嵌入式驱动开发    芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程....第 6 步:项目实战    嵌入式、嵌入式人工智能、物联网、智能家居...

13,825

社区成员

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

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