There are many systems, but the most reliable is always the creation of a file that the application locks. Any further trials to create/access the locked file will fail meaning that an instance is already running holding the lock.
Look
here[
^] for some suggestions. BTW you can find a lot of docs on the subject simply googling...
If you are confortable with mixed programming you can use some C/C++ techniques (i.e. mutex method).