在编写程序的时候,有时我们可能需要知道一个进程运行了多少个实例。首先你可能会想到使用全局变量,但试验结果表明全局变量只在当前进程的范围内有效,一旦你为当前EXE起了另外一个新的进程,为了保证一个进程对全局变量的修改不至于对其他实例造成影响,系统对这些变量采用多份COPY的办法(虽然在启动一个EXE的多个实例进程时系统尽量采用共享内存代码的办法),所以你修改全局变量的值进在当前实例有效。
实际上编译器或者MICROSOFT为你提供了一个可行的办法,对某些CODE进行各个实例之间共享。
VC编译器最终为你生成的EXE或DLL是分为许多节的(具体参见《WINDOWS核心编程》),其中就有一个叫共享节的,在本节中定义的变量在系统级别是共享的,也就是说多个实例可以共享改变量。VC编译器有个/SECTION开关,具体如下:
/SECTION:name,attributes
其中name使用Shared就可以了,attributes用来设置对此节的操作属性。不过可以在程序中直接使用下面的语句来达到同样的效果:
#pragma comment(liner,"/SECTION:Shared,RWS")
代码实例:
#pragma data_seg("Shared")
volatile int g_iAppInstance = 0;
#pragma data_seg()
#pragma comment(linker,"/Section:Shared,RWS")
将上面的代码放到你的main函数之前,在main函数对g_iAppInstance加1,结束的时候减1。
分享到:
相关推荐
如何使一个应用的多个实例运行在同一个进程空间
Java程序多进程运行模式的实例分析,实现进程管理。
InnoSetup只能运行一个实例&唯一进程
PHP多进程实例讲解,一个PHP,如何实现PHP多进程,并控制进程数量
Java程序多进程运行模式的实例分析.pdf
保证应用程序只有一个实例运行! 很值得下载看看!资源免费,大家分享!!
获取正在运行的进程,同时计算出其占用内存的大小。
多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分 ,对于每一个连接的用户都有一个进程。 在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一...
C#与进程有关的3个实例源码 程序介绍: 3个与进程有关的C#源码实例,这三个实例是: 进程管理器、获取当前正在运行的所有进程、使用进程...每一个实例源代码都与Windows进程紧密相关,是进程相关编程的实用参考资料。
当应用程序已经在运行, 再次运行该应用程序时,通常只是把该应用程序的窗口提到前面来,把新的命令行参数传递给第一个运行实例,而第二个实例退出。这在传统的单进程多线程的手机 平台中,实现是简单而直接的,而在...
本人写了一个java进程通信的工具jar,方便大家简单的使用java进程通信。 开启守护进程,获取消息: package com.test; import org.msun.process.ProcessMonitor; import org.msun.process.ProcessMonitor....
VC++ 禁止运行程序的多个实例,程序根据主窗口类名和主窗口名判断是否已经有实例存在,如果存在就将其激活,并显示出来,如果是最小化的就还原窗口;如果有实例存在,则返回False并退出。
C#程序只允许运行一个实例的解决方案
实例033 制作一个数字猜猜看小游戏 40 实例034 使用goto语句在数组中搜索指定图书 42 第3章 字符串处理技术 44 3.1 字符及字符串转换 45 实例035 将字母全部转换为大写或小写 45 实例036 字母与ASCII码的转换 46 ...
以下是一个简单的Python后台进程实例描述: 导入相关库:首先需要导入必要的Python库,如multiprocessing等。 创建后台进程函数:定义一个后台进程函数,该函数将在后台进程中执行。可以在该函数中编写需要在后台...
◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ◆如何获得文件的图标、属性、大小、类型等参数?◆ 36 ◆如何得到鼠标下面的窗口?◆ 37 ◆设置鼠标的形状◆ 38 ◆在对话框中设置...
vc++2005限制只能启动一个程序或者进程,相同的自动退出后者,用于限制启动一个客户端。
linux下进程通信实例,要做操作系统作业的同学可以借鉴下,希望对您有所帮助。
商业编程-源码-让多个程序实例运行在同个进程空间的多个线程中.zip