Results 1 to 7 of 7

Thread: Communicatie met threads

  1. #1

    Communicatie met threads

    Ik gebruik PostMessage vanuit threads om informatie naar de mainform te zenden. Kan je andersom ook data van het mainform naar een thread sturen?
    [Edit]
    Even beetje meer uitleg - voorheen gebruikte ik een class genaamd worker, waarin ik een aantal threads aanmaakte, en dan via een synchronize haalde ik data op in de mainthread welke in de threads werden verwerkt. Ik gebruikte ook synchronize om de data terug aan het mainform te sturen voor updaten van oa de statusbalk en progressbar.
    Dit zorgt voor enorme vertraging in de gui.. Dus nu zend ik de data via postmessage wat lijkt te werken, het gaat nu een stuk sneller. Voor het sturen van data naar de thread gebruik ik een event die ik aanroep in synchronize.

    Is dit een juiste manier?
    Last edited by Reidinga; 01-Sep-18 at 22:54.

  2. #2
    Had je niet beter Queue() kunnen gebruiken in de thread voor die progressbar in plaats van Synchronize()? Dan was je probleem op dat moment misschien al opgelost.

    Synchronize() wacht op terugkeer en Queue() niet.

  3. #3
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    9,732
    Je kan een thread laten wachten op b.v. een event, en dan een item uit een tthreadlist laten halen.

    En Rvk heeft natuurlijk gelijk, overigens, Synchronize is Sendmessage equivalent en Queue () is een postmessage equivalent. Queue is wel D2006+ of zo.

  4. #4
    Je kunt ook een TMonitor gebruiken voor gedeelde resources. In het Delphi Cookbook 2 (en misschien ook 3) van Daniele Teti staan diverse thread technieken die relatief nieuw zijn. Je kunt het book lezen op safari books met een proef abonnement.

  5. #5
    Ja ik gebruik D10.2 - het is vooral dat ik een beetje zit te zien of het "verstandig" is om een deel in de mainthread te houden, ik haal namelijk uit de mainthread data op welke ik verwerk in de threads, ik kan die in een aparte thread zetten maar denk dat dit weer nog meer code en moeilijkheden met zich meebrengt. Ook omdat bij het ophalen van de data er data wordt doorgegeven aan de mainthread (positie).

    Ik ga eens kijken naar Queue.. Misschien dat dat het kan oplossen,

  6. #6
    Als Synchronize zorgt voor teveel vertraging, dan doe je misschien teveel gesynchroniseerd. Het is natuurlijk het handigst om zoveel mogelijk van de data op te halen en voor te kauwen voor de main thread. En het is natuurlijk ook verstandig om de hoeveelheid updates te beperken. Bijvoorbeeld 1000 updates per seconde van je status bar is niet alleen inefficient, maar ook irrelevant voor je gebruiker. Maar als je elke tel een keer synchronise aanroept om alleen wat voorberekende waarden door te geven aan je mainform en in een statusbalk te proppen, dan zou dat niet voor merkbare vertraging moeten zorgen.
    1+1=b

  7. #7
    Senior Member
    Join Date
    Dec 2003
    Location
    Den Haag
    Posts
    186
    Primoz Gabrijelcic heeft een boek geschreven over Delphi High Performance. In hoofdstuk 6 geeft hij voorbeeld code over communicatie met threads. Precies wat je zoekt volgens mij.

    Deze code is vrij te gebruiken. Zie de unit DHPThreads.pas bij Chapter 6, en het project ThreadComm.dpr.
    https://github.com/PacktPublishing/D...gh-Performance

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •