<?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[TThread: mehrere Verzeichnisse gleichzeitig beobachten]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mich mit dem Thema Threads auseinandergesetzt und das Beispiel aus folgender Seite nachprogrammiert.<br />
<a href="http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html" rel="nofollow">http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html</a></p>
<p>Nun möchte ich aber, mehrere Verzeichnisse gleichzeitig beobachten. Dazu hatte ich das von der oben genannten Seite übernommene Beispiel folgendermassen verändert:<br />
- Die zu beobachtenden Verzeichnisse lese ich aus einer INI-Datei und schreibe sie in eine ValueList<br />
- Der Code (Veränderung) sieht folgendermassen aus:</p>
<p>TWatchThread<br />
.h:</p>
<pre><code class="language-cpp">int iWatchPath; 
__fastcall TWatchThread(int i); //Konstruktor für die Anzahl der Verzeichnisse
</code></pre>
<p>.cpp:</p>
<pre><code class="language-cpp">__fastcall TWatchThread::TWatchThread(int i) : TThread(false)
{
    iWatchPath = i;
    FreeOnTerminate = true; //Aufruf von TThread::Terminate() gibt Thread frei.
}

void __fastcall TWatchThread::Execute()
{
  for(iWatchPath; iWatchPath&gt;=1; iWatchPath--)
  {
    FChangeHandle = FindFirstChangeNotification(Form1-&gt;vl1-&gt;Keys[iWatchPath].c_str(), 
false, FILE_NOTIFY_CHANGE_FILE_NAME);
    if (FChangeHandle != INVALID_HANDLE_VALUE)
    {
        while (true)
        {
            if (WaitForSingleObject(FChangeHandle, 500) == WAIT_OBJECT_0) //Änderung.
                Synchronize(TuWas); 

            FindNextChangeNotification(FChangeHandle);

            iWatchPath--;
            if(iWatchPath==0)
              iWatchPath = Form1-&gt;iAnzahl;
            Execute();

            if (Terminated)
                return; //Raus.
        }//while
    }//if
  }//for
}
</code></pre>
<p>TForm1:</p>
<pre><code class="language-cpp">int iAnzahl; //Anzahl der Verzeichnisse

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if (FWatchThread != NULL)
    FWatchThread-&gt;Terminate(); 
  FWatchThread = new TWatchThread(iAnzahl);   
}
</code></pre>
<p>Wie ihr seht habe ich in der Execute()-Methode eine for-Schleife reingebaut, damit ich mehrere Verzeichnisse beobachten kann, was auch funktioniert. Nachteil ist, ich kann die Verzeichnisse nicht <strong>gleichzeitig</strong> beobachten!</p>
<p>Nun genug geredet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> und zu meiner Frage:<br />
Wie kann ich sonst noch mehrere Verzeichnisse gleichzeitig beobachten?<br />
Wie würdet ihr das machen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/79139/tthread-mehrere-verzeichnisse-gleichzeitig-beobachten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 02:13:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/79139.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jul 2004 11:46:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 11:46:42 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mich mit dem Thema Threads auseinandergesetzt und das Beispiel aus folgender Seite nachprogrammiert.<br />
<a href="http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html" rel="nofollow">http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html</a></p>
<p>Nun möchte ich aber, mehrere Verzeichnisse gleichzeitig beobachten. Dazu hatte ich das von der oben genannten Seite übernommene Beispiel folgendermassen verändert:<br />
- Die zu beobachtenden Verzeichnisse lese ich aus einer INI-Datei und schreibe sie in eine ValueList<br />
- Der Code (Veränderung) sieht folgendermassen aus:</p>
<p>TWatchThread<br />
.h:</p>
<pre><code class="language-cpp">int iWatchPath; 
__fastcall TWatchThread(int i); //Konstruktor für die Anzahl der Verzeichnisse
</code></pre>
<p>.cpp:</p>
<pre><code class="language-cpp">__fastcall TWatchThread::TWatchThread(int i) : TThread(false)
{
    iWatchPath = i;
    FreeOnTerminate = true; //Aufruf von TThread::Terminate() gibt Thread frei.
}

void __fastcall TWatchThread::Execute()
{
  for(iWatchPath; iWatchPath&gt;=1; iWatchPath--)
  {
    FChangeHandle = FindFirstChangeNotification(Form1-&gt;vl1-&gt;Keys[iWatchPath].c_str(), 
false, FILE_NOTIFY_CHANGE_FILE_NAME);
    if (FChangeHandle != INVALID_HANDLE_VALUE)
    {
        while (true)
        {
            if (WaitForSingleObject(FChangeHandle, 500) == WAIT_OBJECT_0) //Änderung.
                Synchronize(TuWas); 

            FindNextChangeNotification(FChangeHandle);

            iWatchPath--;
            if(iWatchPath==0)
              iWatchPath = Form1-&gt;iAnzahl;
            Execute();

            if (Terminated)
                return; //Raus.
        }//while
    }//if
  }//for
}
</code></pre>
<p>TForm1:</p>
<pre><code class="language-cpp">int iAnzahl; //Anzahl der Verzeichnisse

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if (FWatchThread != NULL)
    FWatchThread-&gt;Terminate(); 
  FWatchThread = new TWatchThread(iAnzahl);   
}
</code></pre>
<p>Wie ihr seht habe ich in der Execute()-Methode eine for-Schleife reingebaut, damit ich mehrere Verzeichnisse beobachten kann, was auch funktioniert. Nachteil ist, ich kann die Verzeichnisse nicht <strong>gleichzeitig</strong> beobachten!</p>
<p>Nun genug geredet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> und zu meiner Frage:<br />
Wie kann ich sonst noch mehrere Verzeichnisse gleichzeitig beobachten?<br />
Wie würdet ihr das machen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555960</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Thu, 08 Jul 2004 11:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 12:12:35 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>wie waere es mit mehreren THreads</p>
<p>MfG<br />
Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/555995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/555995</guid><dc:creator><![CDATA[KlausB]]></dc:creator><pubDate>Thu, 08 Jul 2004 12:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 12:23:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/690">@KlausB</a><br />
erst einmal herzlichen Glückwunsch nachträglich zur Beförderung!</p>
<p>Für jedes Verzeichnis ein Thread? Daran hatte ich auch gedacht. Problem: Anzahl der Verzeichnisse ist erst zur Laufzeit bekannt und ich brauche so ein Denkstoß, wie ich Threads zur Laufzeit erzeugen kann.</p>
<p>Oder gibt es da vielleicht noch eine andere Idee?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556004</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Thu, 08 Jul 2004 12:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 13:01:56 GMT]]></title><description><![CDATA[<p>Du erstellst ihn bereits zur Laufzeit:</p>
<pre><code>FWatchThread = new TWatchThread(iAnzahl);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/556054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556054</guid><dc:creator><![CDATA[PAB]]></dc:creator><pubDate>Thu, 08 Jul 2004 13:01:56 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 13:15:09 GMT]]></title><description><![CDATA[<p>PAB schrieb:</p>
<blockquote>
<p>Du erstellst ihn bereits zur Laufzeit:</p>
<pre><code>FWatchThread = new TWatchThread(iAnzahl);
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ich habe im Moment solchen Knoten im Kopf <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Hier erzeuge ich &quot;nur&quot; einen Thread für alle Verzeichnisse.<br />
Wie kann ich für jedes Verzeichnis (Anzahl der Verzeichnisse variabel) einen Thread erzeugen, ohne daß sie sich in der Execute()-Methode in die Quere kommen?</p>
<p>Oder habe ich da vielleicht ein Verständnisproblem?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556066</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Thu, 08 Jul 2004 13:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Thu, 08 Jul 2004 13:39:57 GMT]]></title><description><![CDATA[<p>Dafür nimmste am besten den Originalcode ausm BCB-Tutorial. Der ist bereits so ausgelegt, dass er ne Pfadangabe erhalten will.<br />
Im Programm selber kannst du dann die INI auslesen und in ner Schleife die benötigte Anzahl an Threads erzeugen (freigeben nicht vergessen).</p>
<p>Allerdings greift der Thread auf ein Element der Oberfläche (FilesFileListBox) zu, das musst du ihm noch abgewöhnen. Vielleicht bietet sich als Ersatz eine TStringList pro Thread an, aus der du dann die Daten ausliest.</p>
<p>Solange sich die Threads nicht um eine gemeinsame Variable oder Objekt prügeln müssen, laufen die friedlich nebeneinander her.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556093</guid><dc:creator><![CDATA[PAB]]></dc:creator><pubDate>Thu, 08 Jul 2004 13:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Fri, 09 Jul 2004 08:33:49 GMT]]></title><description><![CDATA[<p>Danke <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/55">@PAB</a>, aber das Problem ist immer noch, daß die Verzeichnisse auch in diesem Fall nicht <strong>gleichzeitig</strong> überwacht werden, sondern wieder eins nach dem anderen.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Wenn ich ein Verzeichnis überwache, dann möchte ich dies <strong>permanent</strong> tun. Dafür nehme ich <strong>INFINITE</strong>:</p>
<pre><code class="language-cpp">if(WaitForSingleObject(hChangeHandle, /*500*/ INFINITE) == WAIT_OBJECT_0)
  TuWas();
</code></pre>
<p>Was bei <strong>nur ein einzelnes Verzeichnis</strong> auch prima klappt. Wenn Änderung auftritt, dann führe ich meine Funktion aus, und warte danach wieder auf die nächste Änderung.</p>
<p>Nun will ich aber mehrere Verzeichnisse <strong>gleichzeitig und permanent</strong> überwachen, und nicht nur alle 500 MS. Wenn ich dies wie oben beschrieben tue, dann geht es nicht, weil damit nur das erste Verzeichnis überwacht wird, denn es wird immer wieder auf die nächste Änderung dort gewartet (wegen INFINITE). Das heißt, es geht nicht mehr weiter, und die übrigen Verzeichnisse bleiben unüberwacht.</p>
<p>Eine &quot;halbe&quot; Lösung ist ja für INFINITE eine bestimmte Zeit zu nehmen, z.B. 500 MS. Damit überwache ich jedes Verzeichnis nur 500 MS, und wenn innerhalb dieser Zeit eine Änderung im überwachten Verzeichnis auftritt, dann kriege ich sie auch mit.</p>
<p>Problem: Falls sich in einem Verzeichnis innerhalb der Zeit, in der dieses Verzeichnis unüberwacht ist, was ändert, dann kriege ich das nicht mit, und kann nicht reagieren!<br />
(Bei z.B. 11 Verzeichnissen und 500 MS Wartezeit bleibt ein Verzeichnis 5 Sekunden unüberwacht.)</p>
<p>Ich hoffe, ich habe das Problem näher erklären können, und kein M*** erzählt.</p>
<p>Hat jemand eine Idee, wie ich <strong>mehrere Verzeichnisse permanent und gleichzeitig</strong> überwachen kann?<br />
Wie gesagt, ich brauche nur so einen Denkanstoß oder einen kleinen Hinweis.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556618</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Fri, 09 Jul 2004 08:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Fri, 09 Jul 2004 08:45:43 GMT]]></title><description><![CDATA[<p>WaitFor<strong>Multiple</strong>Objects dürfte wohl in diesem Fall dein Freund sein?<br />
Ich würde übrigens trotzdem den Timeout vielleicht auf 200ms stellen, damit du zwischendurch im Thread auch auf Terminate prüfen kannst (o;</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556628</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Fri, 09 Jul 2004 08:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Fri, 09 Jul 2004 08:52:52 GMT]]></title><description><![CDATA[<p>Oh, ich hab grad nochmals nachgeschaut... die Lösung deines Problems führt wohl zwangsläufig über die Funktion [msdn]ReadDirectoryChangesW[/msdn], im Overlapped-Modus betrieben und oben von mir genannter Funktion...</p>
<p>EDIT: Und wo wir grad dabei sind: Spar dir doch die zusätzliche if und verwende einfach die implizite if die dir &quot;while&quot; mit dem Abbruchkriterium bietet?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556635</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Fri, 09 Jul 2004 08:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Fri, 09 Jul 2004 09:05:37 GMT]]></title><description><![CDATA[<p>Das hört sich sehr gut und viel versprechend an.<br />
Ich werde es gleich ausprobieren und melde mich dann.</p>
<p>herzlichen Dank <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/760">@junix</a>!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556648</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Fri, 09 Jul 2004 09:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to TThread: mehrere Verzeichnisse gleichzeitig beobachten on Mon, 12 Jul 2004 14:41:57 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Hier und da was gelesen und bißchen Code &quot;geklaut&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> half mir, mein Programm &quot;umzukrempeln&quot;. Nun kann ich auch mit &quot;ReadDirectoryChangesW&quot; erstmal ein (einzelnes) Verzeichnis überwachen und die Veränderungen dort abfangen.</p>
<p>Für diejenigen, die sich dafür interessieren, Code folgt (vielleicht kann ihn jemand von den Profis optimieren und für die anderen, die so etwas suchen, zur Verfügung stellen)</p>
<pre><code class="language-cpp">HANDLE FDirectoryHandle;
TWatchThread *FWatchThread;
//HANDLE FCompletionPort;
DWORD FBytesWritten, FNotifyFilter;
BYTE FNotificationBuffer[4];
DWORD numBytes;
TOverlapped FOverlapped;
POverlapped FPOverlapped;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  //FCompletionPort = 0;
  FDirectoryHandle = 0;
  FPOverlapped = &amp;FOverlapped;
  ZeroMemory(&amp;FOverlapped, sizeof(FOverlapped));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  btnStopClick(Sender);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)
{
  /*if (FCompletionPort == 0)
    return;
  PostQueuedCompletionStatus(FCompletionPort, 0, 0, NULL);
  FWatchThread-&gt;WaitFor();
  FWatchThread-&gt;Free(); */
  CloseHandle(FDirectoryHandle);
  FDirectoryHandle = 0;
  //CloseHandle(FCompletionPort);
  //FCompletionPort = 0;
  edPath-&gt;Enabled = true;
  btnStart-&gt;Enabled = true;
  btnStop-&gt;Enabled = false;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender)
{
  lbEvents-&gt;Clear();

  FNotifyFilter = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME
                  | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE
                  | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_LAST_ACCESS
                  | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_SECURITY;

  FDirectoryHandle = CreateFile(edPath-&gt;Text.c_str(),
                                FILE_LIST_DIRECTORY, FILE_SHARE_READ |
                                FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                                NULL,
                                OPEN_EXISTING,
                                FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
                                0);
  if (FDirectoryHandle == INVALID_HANDLE_VALUE)
  {
    Beep();
    FDirectoryHandle = 0;
    ShowMessage(SysErrorMessage(GetLastError()));
    return;
  }
  //FCompletionPort = CreateIoCompletionPort(FDirectoryHandle, 0, (long int)(this), 0);
  ZeroMemory(FNotificationBuffer, sizeof(FNotificationBuffer));
  FBytesWritten = 0;
  if (!ReadDirectoryChangesW(FDirectoryHandle, FNotificationBuffer,
                             sizeof(FNotificationBuffer), true, FNotifyFilter,
                             &amp;FBytesWritten, &amp;FOverlapped, NULL))
  {
    CloseHandle(FDirectoryHandle);
    FDirectoryHandle = 0;
    //CloseHandle(FCompletionPort);
    //FCompletionPort = 0;
    ShowMessage(SysErrorMessage(GetLastError()));
    return;
  }

  edPath-&gt;Enabled = false;
  btnStart-&gt;Enabled = false;
  btnStop-&gt;Enabled = true;
  FWatchThread = new TWatchThread(this);
  TWatchThread(FWatchThread).Resume();
}
//---------------------------------------------------------------------------
__fastcall TWatchThread::TWatchThread(bool CreateSuspended) : TThread(CreateSuspended)
{
  FreeOnTerminate = true; //Aufruf von TThread::Terminate() gibt Thread frei.
}
//---------------------------------------------------------------------------
_fastcall TWatchThread::~TWatchThread()
{
  TThread::inherited(); //Standarddestruktor.
}
//---------------------------------------------------------------------------
void __fastcall TWatchThread::Execute()
{
  while (!Terminated)
  {
    /*GetQueuedCompletionStatus(FCompletionPort, &amp;numBytes, &amp;CompletionKey, &amp;FPOverlapped, INFINITE);
    if (CompletionKey != 0 )*/
    if(WaitForSingleObject(FDirectoryHandle, INFINITE) == WAIT_OBJECT_0)
    //if(WaitForMultipleObjects(iAnzahl, FDirectoryHandle, true, INFINITE) == WAIT_OBJECT_0)
    {
      Synchronize(Events);

      FBytesWritten = 0;
      ZeroMemory(FNotificationBuffer, sizeof(FNotificationBuffer));
      ReadDirectoryChangesW(FDirectoryHandle, FNotificationBuffer, sizeof(FNotificationBuffer),
      true, FNotifyFilter, &amp;FBytesWritten, &amp;FOverlapped, NULL);
    }
    else
      Terminate();
  }
}
//---------------------------------------------------------------------------
void __fastcall TWatchThread::Events()
{
  Form1-&gt;lbEvents-&gt;Items-&gt;Add(Now());
}
//---------------------------------------------------------------------------
</code></pre>
<p>Mein Problem besteht aber dennoch darin, mehrere Verzeichnisse gleichzeitig und permanent zu überwachen. Mit &quot;WaitForMultipleObjects&quot; sollte das eigentlich gehen, aber ich habe es bis jetzt ehrlich gesagt nicht geschafft.</p>
<p>Wie soll ich da vorgehen?<br />
Kann mir da vielleicht jemand helfen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/558962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/558962</guid><dc:creator><![CDATA[-xy-]]></dc:creator><pubDate>Mon, 12 Jul 2004 14:41:57 GMT</pubDate></item></channel></rss>