[vcl threads] watchdir. wieviele threads kann windows verwalten?



  • http://bcb-tutorial.c-plusplus.net/Thread/artikel7.html
    hallo allerseits, fragen zu dem oben verlinkten tutorial.
    wieviele threads kann windows eigentlich verwalten, wenn für jedes zu überwachende verzeichnis einen separaten thread erzeugt wird? ist es auch sinnvoll, es so zu machen (ein thread pro verzeichnis)?

    dankeschön



  • Hallo

    Wieviele Threads Windows verträgt solltest du wohl besser im WinAPI-Forum nachfragen, schließlich basieren auch die VCL-Threadklassen auf der WinAPI.

    Wenn du in deinem Programm keine sichere Höchstgrenze an Verzeichnissen vorgeben willst, dann solltest du wirklich besser einen Thread für alle Verzeichnisse verwenden.

    bis bald
    akari



  • halloforum schrieb:

    wieviele threads kann windows eigentlich verwalten

    http://blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx



  • audacia schrieb:

    ...

    danke für den link.
    http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx

    akari schrieb:

    Wenn du in deinem Programm keine sichere Höchstgrenze an Verzeichnissen vorgeben willst, dann solltest du wirklich besser einen Thread für alle Verzeichnisse verwenden.

    danke für den hinweis. aber wenn nur ein thread für die überwachung aller verzeichnisse verwendet wird, dann können nicht alle verzeichnisse permanent (gleichzeitig) überwacht und ggf. aktionen durchgeführt werden.
    beispiel:
    mehrere verzeichnisse werden im selben thread überwacht. es geschieht etwas in einem der verzeichnisse. dies wird abgefangen und eine aktion durchgeführt. während dieser ausführung passiert etwas in einem anderen verzeichnis. diese kann aber nicht abfangen werden, da im moment eine andere aktion durchgeführt wird.

    oder hab ich da einen denkfehler?

    danke



  • Hallo

    Dann must du eben die Überwachnung von der Ausführung trennen. Das heißt : Ein Thread führt die Überwachung aus. Falls etwas passiert wird die entsprechende Ausführung in einem neuem extra Thread gestartet.

    bis bald
    akari



  • ok. ein guter hinweis. daran hab ich noch nicht gedacht. danke!
    um mehrere verzeichnisse zu überwachen verwendet man WaitForMultipleObjects oder?
    bisher hatte ich eine variante mit WaitForSingleObject, die mir aber nicht gefallen hat, da ich das überwachen nicht mit einem abbruchsignal stoppen konnte. deshalb verwende ich jetzt ReadDirectoryChangesW mit overlapped und GetQueuedCompletionStatus. das abbruchsignal wird dann mit PostQueuedCompletionStatus realisiert.

    können diese methoden auch genutzt werden, im falle der überwachung von mehreren verzeichnissen in einem einzigen thread. oder muss man in diesem fall zwingend WaitForMultipleObjects verwenden? wie kann das warten in diesem fall abgebrochen werden?

    danke nochmals



  • Hallo

    Wenn ich nochmal drüber nachdenke ist zumindestens für die Überwachung ein Thread wahrscheinlich sowieso keine gute Lösung. Du solltest lieber im WinAPI-Forum nach Verzeichnis-Hooks schauen. Damit kannst du dich von Windows benachrichtigen lassen wenn in einem ausgewählten Verzeichniss etwas passiert.

    bis bald
    akari



  • ok. danke. kannst du mich bitte dahin schieben?

    sachverhalt:
    ich überwache mehrere verzeichnisse. die anzahl der verzeichnisse ist variabel. dazu verwende ich dynamic array. für jedes zu überwachende verzeichniss erzeuge ich zur laufzeit einen thread. die überwachung erfolgt dann mittels ReadDirectoryChangesW mit overlapped und GetQueuedCompletionStatus. das abbruchsignal kommt von PostQueuedCompletionStatus.

    bei "angemessener" anzahl von verzeichnissen (threads) ist es auch ok so. das problem kommt aber mit wachsender anzahl von verzeichnissen.

    hat jemand vielleicht eine idee, wie ich das anders machen könnte?

    danke für jeden hinweis.



  • Hallo

    Es ist besser wenn du für die Frage nach den Hooks einen neuen Thread im WinAPI erstellst (nachdem du FoSu und FAQ durchgeschaut hast!), mit einer entsprechenden konkreten Frage.

    bis bald
    akari



  • alles klar. danke


Anmelden zum Antworten