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

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • Hundreds of millions of users have adopted public cloud storage solutions to satisfy their Private Online File Sharing and Collaboration (OFS) needs. With new headlines on cloud privacy issues appearing almost daily, the need to explore private alternatives has never been stronger. Join ESG Senior Analyst Terri McClure and Connected Data in this on-demand webinar to take a look at the business drivers behind OFS adoption, how organizations can benefit from on-premise deployments, and emerging private OFS …

Most Popular Programming Stories

More for Developers

RSS Feeds