Class to get a thread safe count of previous Instances

There have been many examples,posted on CodeGuru, of how to check for a previously running instance of an application. Some used DDE, others mutexs but what struck me as the easiest suggestion was to use a 'shared section' to store a flag - accessable by every instance.

The following class uses that technique, along with a couple of the 'interlocked' functions to make it threadsafe. Instead of a simple flag, a count of running instances is kept. The count obtained by the class is only a snapshot.

To use the class simply create a static instance of it. Then check the 'Count()' method to determine how many instances of your application where running before the CPreviousInstance object was instantiated.

Code tested on WinNT 4.0 spk 4 VC6.0 spk 2

// CPreviousInstance.h

class CPreviousInstance  
{
public:
	CPreviousInstance();
	virtual ~CPreviousInstance();

	LONG Count() const
	{
		return m_previous;
	}

private:
	static LONG		s_count;
	LONG			m_previous;

	CPreviousInstance(const CPreviousInstance&);
	CPreviousInstance& operator=(const CPreviousInstance&);
};

// CPreviousInstance.cpp

// static instance count stored in a shared read/write section

#pragma data_seg("Instance")

LONG  CPreviousInstance::s_count = 0;

#pragma data_seg()
#pragma comment(linker,"/section:Instance,rws")


// Construction/Destruction

CPreviousInstance::CPreviousInstance():
m_previous(0)
{
	m_previous = ::InterlockedIncrement(&s_count);
	--m_previous;
}

CPreviousInstance::~CPreviousInstance()
{
	::InterlockedDecrement(&s_count);
}




Comments

  • Even Jeffrey Richter did neglect the crash bug.

    Posted by Legacy on 10/17/2000 12:00am

    Originally posted by: Franz

    I saw Mike Junkin's proposal in a slightly different coding published in Jeffrey Richter's Advanced Windows, an even an expert like him did not point out that this method fails when one of the instances crashes.

    This proofs to me how much source code may exist which holds 'logical' bugs and un-thought possibilities.

    Reply
  • What about a crash

    Posted by Legacy on 03/15/1999 12:00am

    Originally posted by: Mike

    Some of the other methods allow the system to handle a crash. Wouldn't your count be incorrect if one of the instances would take a dive?

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Intelligent N+X Redundancy, Placement Affinities, & Future Proofing in the Virtualized Data Center Virtualization brought about the ability to simplify business continuity management in IT. Workload portability and data replication capabilities mean that physical infrastructure failures no longer need impact application services, and they can rapidly be recovered even in the event of complete site failure. However, Enterprises and Service Providers face new challenges ensuring they have enough compute …

  • New IT trends to support worker mobility -- such as VDI and BYOD -- are quickly gaining interest and adoption. But just as with any new trend, there are concerns and pitfalls to avoid. Download this paper to learn the most important considerations to keep in mind for your VDI project.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date