AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads werden automatisch beendet

Ein Thema von der_boss · begonnen am 19. Aug 2005 · letzter Beitrag vom 20. Aug 2005
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#21

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 22:32
Zitat von Olli:
@BlackJack: a.) geht auch das nicht ohne Synchronisation,
aber wenn man in dem Timer-Event jetzt z.b. nur einen Integer aus der Thread-Instanz auslesen will, muss man doch nicht synchronisieren, oder? ich dachte immer man müsste nur synchronizieren, wenn man auf grafische Koponenten zugreift.

Zitat von Olli:
b.) bitte keine Timer. Wenn er schon Threads benutzt, dann auch konsequent. Da wären Timer nur Ressourcenverschwendung.
naja ich finde es irgendwie unnütz, nur für z.b. eine regelmäßige ausgabe eines Wertes extra eine eigene Thread-klasse zu schreiben und die dann die ganze zeit warten zu lassen, da meiner meinung nach dafür ein Timer voll und ganz ausreicht. und wenn man das Timerintervall auf 1 sekunde oder so setzt, dann dürfte der ja auch nicht allzu viele resourcen fressen (ich weiss jetzt natürlich nicht ob das für das gegebene problem ein geeigneter wert wäre).
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#22

Re: Threads werden automatisch beendet

  Alt 19. Aug 2005, 22:57
Zitat von BlackJack:
aber wenn man in dem Timer-Event jetzt z.b. nur einen Integer aus der Thread-Instanz auslesen will, muss man doch nicht synchronisieren, oder? ich dachte immer man müsste nur synchronizieren, wenn man auf grafische Koponenten zugreift.
Du mußt immer dann synchronisieren, wenn es 2 verschiedene aber potentiell gleichzeitig laufende Instanzen gibt, die ein Datum lesen oder schreiben.

Nur bei DWORD, Word und Byte (und auf Win64 auch ULONGLONG) kannst du atomares Lesen und Schreiben ohne viel Brimborium garantieren. Natürlich würde man, wenn Lesen und Schreiben getrennt stattfinden, auch getrennte Critical Sections benutzen.

Das mit den grafischen Komponenten verwechselst du schonmal mit der VCL und TThread. Dies ist nicht voll allgemeingültig.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#23

Re: Threads werden automatisch beendet

  Alt 20. Aug 2005, 08:24
Meine Threads sehen i.a. immer so aus ('Workerthreads'):
Delphi-Quellcode:
Procedure TMyThread.Execute;
Begin
  While Not Terminated do
    If WaitForSingleObject (hndSempahore, dwMyTimeout) = WAIT_OBJECT_0 Then
      // führe den Auftrag aus
    else
      // Timeout Verarbeitung
End;
Das 'hndSemaphore' ist ein mit 'CreateSemaphore' erzeugtes Handle auf eine Semaphore. Das ist sowas wie ein Zähler.
WaitForSingleObject wartet solange, bis die Semamphore (der Zähler) > 0 ist. Mit 'ReleaseSemaphore' 'addiert' man etwas zur Semaphore und kann so dem Thread sagen, das er loslegen soll. Das Ganze ist absolut Threadsicher.

Ich würde einen Thread schreiben, der im Hintergrund Daten einliest und in einen Buffer schreibt (z.B. einem FIFO oder Queue). Nach dem Schreiben eines Datenpaketes, oder wenn der Buffer halbvoll ist oder so, wird ein zweiter Thread angestossen, der die Daten aus dem Buffer ausliest und weiterverarbeitet (z.B. zeichnet). Dieser zweite Thread wird natürlich auch über eine Semaphore angestossen.

Wenn ich die Weiterverarbeitung nur mit einem Zeitgeber (threadgesteuert oder als Timer) mache, kann es passieren, das der Buffer zu voll wird.

Der Vorteil dieser Methode ggü einem einfachen Suspend/Resume ist die mögliche Behandung eines Timeouts. Ich finde es auch nicht ästhetisch, wenn ein Thread sich per Suspend selbst schlafen legt. Aber das ist Geschmackssache.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz