PDA

View Full Version : Determine if a process is running (platform independant)



Arktos
8th November 2009, 22:49
Hi everyone :)

I'm relative new to Qt (but not to programming in C++) and absolutly new to this forum.
English is not my native language and I hope everyone will understand me ;)

I read this forum for a few weeks as a guest. I come from Germany and there is a german Qt-forum too, but it's quality is far away from this forum (slime :D )

My Qt skills grows day by day and I hope in the future i can help other Qt-ler's too.

My main-platform is Win32 under Windows XP (and soon on Windows 7 when I get enough time to install and configure it)

And here is my first question:

Is there a platform-independant (Qt-like) way to determine if a process is running?
For example under Win32 a program called testprogram.exe is running - is it possible to determine this without Win32-Api-calls?

And if not, is it possible for my program to determine on which OS it is running at runtime?
So that I can use Win32-Api-calls only when it is running on a win32-machine?

So, enough for my first post. Thanks to all of you who got the time to read this and maybe can help me ...

Lykurg
8th November 2009, 23:09
Is there a platform-independant (Qt-like) way to determine if a process is running?

I don't know :(


And if not, is it possible for my program to determine on which OS it is running at runtime?
So that I can use Win32-Api-calls only when it is running on a win32-machine?

bool isRunning = false;
#ifdef Q_OS_WIN32
// do your windows stuff here
// e.g.
is Running = true;
#endif
#ifdef Q_OS_UNIX
// do your Unix stuff here
#endif

squidge
8th November 2009, 23:32
Why do you need to know which OS you are running on at runtime? Your going to need two different executables anyway, so might as well do it differently in each, by means of a #ifdef or similar.

Arktos
9th November 2009, 19:11
Thanks to both of you. Of course you are right I have to build for each OS separately, so I can use the Qt-Macros and #IF -Statements anyway.

But the second part of my question is still interesting for me. Why? I will give you a short background of what i want to do:

I write a statistic program for a game. This game writes logfiles while playing this game.
Now it is interesting for my program to know wheter the game is running and when it is running to live-refresh the statistics by reading the logfile.

The Game runs on Win32 and MacOS, so i ask for a way to determine platform independant that the game ( a process) is running at this moment when my statistic program is running as well.

Thank you very much for reading
and have a nice day :cool:

squidge
9th November 2009, 21:12
You mean you want to do inter process communication? Or you could just use a mutex to detect whether or not the first program is running (If its running, trying to acquire the mutex will fail as its already been obtained by the first program).

Or, you could just do it the way Unix programs have done it for years: Open a file when the first program runs. Write the process id to that file (or something else, for example, the date and time if you don't care about talking to it), and delete that file when the first program quits. The second program (the statistic program) will simply check if that file exists, and if so, will assume the first program is running (and perhaps check the contents to make sure the file isn't stale)