Auf Prozess warten

D

DrHastig

Moin,

gibt es eine Möglichkeit mit C/C++ unter Windows, ohne große CPU auslastung, auf die Ausführung eines Prozesses/einer .EXE zu warten?

Selbe Frage auchnoch in Bezug auf das Beenden von Prozessen.

MfG
DrHastig
 
Hallo,

ich weiß nicht, ob das genau dass ist, was Du suchst, aber habe hier eine3 Funktion, mit der geprüft wird, ob das Programm "sl.exe" läuft!
Das könntest Du vermutlich dahingehend anpassen, in dem Du "rythmisch" (Timer/Schleife etc., je wie Du's brauchst) solange fragst, ob es noch läuft, bis es dann nicht mehr läuft!

Hoffe, es hilft :p

Gruß
Klaus

C:
/*****************************************************************************
 *    FUNCTION    : bool CTobitTemplateParser::isServiceLayerRunning()         * 
 *---------------------------------------------------------------------------*
 *    DESCRIPTION : Überprüfung ob der ServiceLayer "sl.exe" von Tobit läuft   *
 *                                                                             *
 *    ARGUMENT    : None                                                       *
 *    RETURN      : ja / nein                                                  *
 *****************************************************************************/
bool CTobitTemplateParser::isServiceLayerRunning()
{
    HANDLE hSnapShot;
    PROCESSENTRY32 pEntry;

    bool bRes = false;

    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnapShot == INVALID_HANDLE_VALUE)
    {
        TRACE("CreateToolhelp32Snapshot (of processes)");
        return (bRes);
    }

    pEntry.dwSize = sizeof(pEntry);

    while (1)
    {
        BOOL hRes = Process32Next( hSnapShot, &pEntry );
        
        if( hRes == FALSE )
            break;

        if( _strnicmp(pEntry.szExeFile, "sl.exe", strlen("sl.exe")) == 0 )
        {
            bRes = true;
            break;
        }
    }

    return bRes;

}
 
Hi,

schau dir in der MSDN mal folgende Methoden an.

GetExitCodeProcess, TerminateProcess.

Equivalent dazu für Threads :

GetExitCodeThread und TerminateThread.

Mi denen solltest du weiterkommen.

Grüße,

Pit
 
Hallo,

folgende Funktionen düften hilfreich sein:
CreateProcess() - um den Prozess zu starten
WaitForSingleObject() - um resourcenschonend auf das Ende des Prozesses zu warten
TerminateProcess - um den Prozess abzuschießen.

Das Ganze dann bei Bedarf noch in einen eigenen Thread packen, falls die Applikation inzwischen noch was anderes tun soll.

Gruß
MCoder
 
Thx ich werde mir die Sachen sobald Zeit ist mal angucken.

Gibt es, um zu prüfen ob ein Prozess läuft oder nicht, nur eine Möglichkeit über polling oder kann man sich beim OS irgendwie registrieren um dann geweckt zu werden wenn der Prozess gestartet wird?

Kann man nur auf den Prozessnamen testen oder kann man auch herausfinden welche .exe das nun wirklich ist? Gibt ja z.B. zich Programme die eine "update.exe" oder ähnliches nutzen.
 
Moin,

worum geht es Dir denn primär?
Ich hatte Deine Eingangsfrage so verstanden, dass Du prüfen willst, ob ein bestimmtes Programm läuft .....
Ok, wenn dies meinetwegen "update.exe" heißt, kann das schwierig werden, falls mehrere gleichnamige gleichzeitig laufen !

Falls Du das Programm, so wie von McCoder vorgeschlagen selbst in eigenen Thread starten willst, kannst Du natürlich die zugehörige Thread-ID checken!

Gruß
Klaus
 
Danke für die Antworten ich werde sie mir angucken sobald ich dazu komme. Man hat mal wieder mehr zu tun als einem lieb ist -_-

Ich will in einem Programm auf andere Programme reagieren. Z.B. die Ausführung eines Programms verhindern, also nach dem start sofort beenden, bei start eines Programmes eine Meldung ausgeben und all so ein Zeugs.

Daher wär es schön gewesen wenn man sich auf so ne Art Observerliste eintragen könnte und das OS einen dann weckt sobald ein Prozess gestartet wurde.

Für gleichnamige EXEn wäre es halt auch noch schön zu wissen welche es genau ist.
 
Zurück