程序运行5份实例的实现

前几天看到某君问到:如何在一台机器上实现只能运行一个程序的10份实例?于是我思考了一下,写出了实现代码。程序的界面如下:

由于这个程序有无界面关系不大,所以就没怎么装扮,也没有把刘涛的照片加进来。
在以前就听说了可以让程序只运行一份实例,实现这个的方法还是比较多的,用得最普遍的可能就是Mutex。而现在的任务是可以运行10份实例,有朋友可能会说用Mutex会很容易完成,然而遗憾的是只用Mutex真的很难实现,
(A:我要用互斥来实现这个任务。
 B:仅用互斥很难实现,它不适合你,放弃吧!
 A:非互斥不要)
嘿嘿....A君的痴情似乎不应该用在这里,那么花心的我应该如何实现呢?答案即将接晓,让我们拭目以待!下面插播5分钟的广告,广告后再继续。
广告中.....
好了广告完了,废话也完了,下面来说一下主题:
主要的方法就是在程序中加入共享节添加一个全标志位,然后再作判断就可以实现了。关于共享节并不想说太多,一句话:它是居家旅行,进程通信之必备良药:

#include <windows.h>
#include "resource.h"
#include <stdio.h>
#pragma data_seg(".thinkSJ")/添加一个新节并共享
DWORD gs_dCount = 0;
#pragma data_seg()
#pragma comment(linker,"/section:.thinkSJ,RWS")
LRESULT CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)
{
    ::DialogBoxParam (hInstance,(LPCTSTR)IDD_MAIN,NULL,(DLGPROC)DlgProc,NULL);
    return 1;
}
LRESULT CALLBACK DlgProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG:
        gs_dCount += 1;    //在初使化消息中对全局标志位加1
        if(gs_dCount > 5)/该程序只能运行5份实例
        {
            ::SendMessage (hWnd,WM_CLOSE,0,0);
        }
        return true;
    case WM_CLOSE:
        gs_dCount -= 1;//在关闭消息中对全局标志位减1
        ::EndDialog (hWnd,0);
        return true;
    }
    return false;

声明:文中所涉及的人物(如:A君、B君)匀采用化名,请勿对号入座!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值