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

  • Custom applications deliver significant value. With the right tools, organizations can maximize the value of custom applications by accelerating and simplifying their development, and enabling IT to manage them in close alignment with business decision-makers. And by using a platform optimized for the development of custom applications, businesses can reduce costs, lower TCO, enhance agility, and accelerate the time to value for new business services. Read this white paper to learn how your organization can …

  • The 2014 State of DevOps Report — based on a survey of 9,200+ people in IT operations, software development and technology management roles in 110 countries — reveals: Companies with high-performing IT organizations are twice as likely to exceed their profitability, market share and productivity goals. IT performance improves with DevOps maturity, and strongly correlates with well-known DevOps practices. Job satisfaction is the No. 1 predictor of performance against organizational …

Most Popular Programming Stories

More for Developers

RSS Feeds

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