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
 
Benutzerbild von negaH
negaH

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

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

  Alt 29. Jun 2006, 00:29
Stimmt das war ungenau. Diese Strukturen sind nötig für asynchrone und gepufferte IO Operationen. Das trifft auf das Filesystem API zu, auch auf zb. COM oder USB API und eben auf Sockets. Neben einem Event kann in dieser Datenstruktur noch wesentlich mehr beeinflusst werden. Sockets, COM, USB und oft auch File Operationen die per Events asynrchon signalisiert werden machen meistens nur mit dieser Overlapping Struktur einen Sinn. Das Overlapping hat sich deshalb bei mir so eingeprägt weil es mit Überlappung (zeitlichen Überschneidungen) zu tuen hat, also asynchron ist.

Es geht aber noch weiter !

Zitat:
Stell dir folgendes vor. Du hast einen Gerätetreiber (egal für was) und du weißt, daß das Gerät länger braucht um eine Anforderung deinerseits zu bearbeiten. Deshalb entscheidest du dich, daß du eine Anforderung, z.B. ein ReadFile , asynchron abschickst. Im Klartext bedeutet das, daß die Funktion ReadFile sofort zurückkehrt und du dank des hEvent in der OVERLAPPED-Struktur über den Ausgang (Erfolg/Mißerfolg) deiner Anforderung benachrichtigt wirst, sobald sie verarbeitet wurde.
und ergänzend kommt nun das Threadhandling als Verbesserung hinzu.

Denn stell dir vor das alles machst du in einem Thread. Der Thread wartet nun nicht mehr auf das synchrone Abarbeiten der IO Operation sondern legt sich mit WaitForSingle/MultipleObjects selber schlafen. Er verbraucht so keine Rechenzeit und wird nun statt ständig zu warten bzw. zu pollen direkt vom OS per Event signalisiert das was fertig ist. Und ganz wichtig ! Statt sequientiell nacheinander mehrere solcher IO Operation nacheinander zu erledigen (mit unbekannter Wartezeit) startet er einfach mehrere solcher asynchronen Vorgänge und wartet dann einfach per WaitForMultipleObjects() auf das Eintreffen eines Signales einer dieser IO Operationen. Je nach Dauer dieser Operationen wird er mit der ersten fertigen Operation anfangen. Gerade bei Sockets mit ihren unvorhersagbarem Timing also ideal.

Events, Overlapping, IO Operationen, Semaphore und sogar der Messagequeue machen dann mit Hilfe der Threads so richtig Sinn.

Gruß Hagen
  Mit Zitat antworten Zitat
 


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 16:14 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