AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Threads, welche Lösung haltet Ihr für eleganter ?
Thema durchsuchen
Ansicht
Themen-Optionen

Threads, welche Lösung haltet Ihr für eleganter ?

Ein Thema von DataCool · begonnen am 27. Jun 2006 · letzter Beitrag vom 29. Jun 2006
Antwort Antwort
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#1

Re: Threads, welche Lösung haltet Ihr für eleganter ?

  Alt 28. Jun 2006, 10:21
Willst du in einem Thread warten, also ihn eine Zeitspanne stoppen, dan immer deine 2. Lösung benutzen. Das ist nicht nur eleganter (hat damit nichts zu tun) sondern es ist RICHTIGER !

Dein Event auf das er wartet wird in einer separaten Methode des Threadobjektes zb. .Stop; oder .Finish; etc.pp. ausgelöst und somit terminiert der Thread sofort und nicht erst nach X Millisekunden wie beim primitive Sleep().

Allerdings sollte es sogar so sein das du WaitForMultipleObjects() benutzt. Du benötigst dann Zugriff auf min. 2 Events gleichzeitig.

1.) dein Stop/Termierungs Event, so wie du es oben schon hast, um den Thread schnell und sauber zu terminieren.
2.) ein Data-Event. Also eigentlich ein Event das signalsiert das du nun mit ReadLn von zb. deinem Socket Daten abholen kannst.

In diesem Moment wartest du im WaitForMultipleObjects() immer INFINITE.

Erst DAS wäre eine absolut saubere Anwendung von Threads. Denn Threads habe auf einem Single-CPU Prozessor nur dann einen effektiven Nutzen wenn sie über die Events des OS signalisiert bekommen wann sie was abzuarbeiten haben, und ansonsten die meiste Zeit schlafen, also nichts an Rechenzeit kosten. Sockets, COM, USB usw. Treiber unter Windows unterstützen alle die Asynchrone Kommunikation per Events gesteuert (siehe Overlapping). Nur per Events und Threads kommt man vom Polling (als schechteste Alternative) weg.

Davon abgesehen kann das OS nur über diesen Weg auch eine saubere Synchronisation Threadübergreifend zur Verfügung stellen. Denn die Signalisierung eines Events arbeitet Hand in Hand mit den Synchronisationsobjekten unter Windows und auch dem Messagequeue.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz