进程初探之

进程初探之<五>

       这一段时间,我的心情开始低落了。对自已不象以前那样有信心,总感觉自己知道的太少,跟别人比起来我似乎总是差了那么一些。可是,我总认为我是一个努力勤奋的人,我在不断地努力钻研,学习。从标准的C++、windowsSDK,windows的内核再到COM、ATL这些知识,我总是象一个饥饿的人一样扑进去,在这些代码的片断中我能找到我前进的脚印。可是在现实中我却还少了一个给我表演的舞台,我难抑自我的失落。

      这一段时间,广州这里的雨水特别的多,比广州春天的雨水还要多。每天都有几场大雨,路上的行人也总有些被淋得浑身湿透,我很向往能“自然”地雨中洗礼一番,享受这自然的赋予,冲去一身的尘埃。心里在想这么这个老天变成了一个爱哭的神仙了,抑或是悲泣于我国的自然灾害。神仙也是有感情的,这也难怪了,他这也是情不自禁罢了。

      进程是程序在一个数据集合上的一次活动。我们的程序是执行这个活动的逻辑实现体,我们可以在窗口中同时启动多个我们的这个程序(当然这要得到程序的允许,通常情况下是允许的,如果要做到不允许可以通过比如互斥器等来实现)。我很想知道我有多少个实例被启动了,有时我就是这样的好奇。我尝试着如下做时我达到了我的目的。

#pragma data_seg( " Shared " )
volatile  LONG g_lApplicationInstances  =   0
#pragma data_seg()
   #pragma comment(linker,"/Section:Shared,RWS")


int  APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE ,
                     LPSTR     lpCmdLine,
                     
int        nCmdShow)
{
    InterlockedExchangeAdd((PLONG)
&g_lApplicationInstances, 1);
//do some work
    InterlockedExchangeAdd((PLONG)&g_lApplicationInstances, -1);

    
return 0;
}



每当进入主函数,我就对这个计数器进行递增一次,每次离开前我就减少一。我要的时候我就在程序中直接取这个计数器就行了。这样我很好地达到了我的目标。当然把这个数据段放在某个共享的DLL中的也是可以的,这个为什么能够实现还得从PE文件来说。在这里我只要知道这些宏会在生成PE文件时会这把这个段放到共享段中去,这样windows在加载多个时并不会对这个数据段进行多份复制就行了。

你可能感兴趣的:(进程初探之)