<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Process handles]]></title><description><![CDATA[<p>Hi Leute,<br />
hab mit folgender Funktion das Problem das Process Handles wie blöd erzeugt werden und nicht nach dem verwenden wieder freigegeben. Ich möchte nur überwachen ob der gewünschte Process läuft. Was mach ich falsch ?</p>
<pre><code class="language-cpp">void __fastcall TForm1::ProcessCheckTimer1(TObject *Sender)
{
   HANDLE process =  GetProcessHandle(&quot;LFS.exe&quot;,PROCESS_ALL_ACCESS);
   if(process == NULL)
  {
    BitBtn2-&gt;Caption = &quot;Start Server&quot;;
    process_id = 0;
    ProcessTimer1-&gt;Enabled = false;
    insimready = false;
    insimlist-&gt;Clear();
  }

  CloseHandle(process);
  delete process;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/148204/process-handles</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:59:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/148204.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 May 2006 10:29:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Process handles on Wed, 24 May 2006 10:29:05 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
hab mit folgender Funktion das Problem das Process Handles wie blöd erzeugt werden und nicht nach dem verwenden wieder freigegeben. Ich möchte nur überwachen ob der gewünschte Process läuft. Was mach ich falsch ?</p>
<pre><code class="language-cpp">void __fastcall TForm1::ProcessCheckTimer1(TObject *Sender)
{
   HANDLE process =  GetProcessHandle(&quot;LFS.exe&quot;,PROCESS_ALL_ACCESS);
   if(process == NULL)
  {
    BitBtn2-&gt;Caption = &quot;Start Server&quot;;
    process_id = 0;
    ProcessTimer1-&gt;Enabled = false;
    insimready = false;
    insimlist-&gt;Clear();
  }

  CloseHandle(process);
  delete process;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1064106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064106</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Wed, 24 May 2006 10:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Process handles on Wed, 24 May 2006 10:43:15 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>CloseHandle übernimmt für dich bereits das Aufräumne des handles, das delete danach ist ein eindeutiger Fehler.</p>
<p>Das ganze kannst du übrigens mit der WinAPI-Funktion <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/cerefWaitForSingleObject.asp" rel="nofollow">WaitForSingleObjekt</a> wesentlich eleganter lösen. Dazu findest du sicher mehr im WinAPI-Forum.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1064120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064120</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 24 May 2006 10:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to Process handles on Wed, 24 May 2006 12:14:12 GMT]]></title><description><![CDATA[<p>Fein Fein akari <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich warte jetzt nach dem erstellen des Prozesses (CreateProcess) auf das Process Ende ohne einen Timer:</p>
<pre><code class="language-cpp">while(WaitForSingleObject(stgProcessInfo.hProcess, 100) == WAIT_TIMEOUT &amp;&amp; Application-&gt;Terminated == false)
{
  Application-&gt;ProcessMessages();
}
GetExitCodeProcess(stgProcessInfo.hProcess, &amp;ExitCode);
CloseHandle(stgProcessInfo.hProcess);
</code></pre>
<p>Das Funktioniert jetzt wunderbar. Ich hab aber das Problem das in folgender Funktio nicht alle Handles sauber freigegeben werden. Was mache ich hier falsch ?</p>
<pre><code class="language-cpp">HANDLE GetProcessHandle(String strProcessExe, DWORD dwDesiredAccess)
{
 HANDLE hSnapShot; // System-Snap-Shot-Handle
 PROCESSENTRY32 PEntry; // Process-Enumerations-Struktur
 HANDLE hProcess; // Prozess-Handle
 String strExeFile; // Hilfssstring
 bool bOK; // Abbruch-Flag

 hSnapShot=::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );// Liste aller im System laufenden Prozesse erstellen

 if( hSnapShot==INVALID_HANDLE_VALUE )// Fehler aufgetreten
 return NULL;

 // Prozess-Liste durchlaufen
 PEntry.dwSize=sizeof( PEntry );
 bOK=::Process32First( hSnapShot, &amp;PEntry );
 for( ; bOK; bOK=::Process32Next( hSnapShot, &amp;PEntry ))
 {
   hProcess=::OpenProcess( dwDesiredAccess, FALSE, PEntry.th32ProcessID );// Pozess-ID in Handle umwandeln
   if( hProcess==NULL )// Umwandlung misslungen
   continue;

   // Prozess-Executable prüfen
   strExeFile=PEntry.szExeFile;
   if(strExeFile == strProcessExe &amp;&amp; PEntry.th32ProcessID == process_id) // Passenden Prozess gefunden, Handle zurückgeben
   return hProcess;
 }
 // Nichts Passendes gefunden
 return NULL;
}
</code></pre>
<p>Edit: Habs jetzt so gemacht das ich das HANDLE was von GetProcessHandle zurück gegeben wird freigebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1064174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1064174</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Wed, 24 May 2006 12:14:12 GMT</pubDate></item></channel></rss>