![]() |
Re: Threads werden automatisch beendet
Zitat:
Zitat:
|
Re: Threads werden automatisch beendet
Zitat:
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. |
Re: Threads werden automatisch beendet
Meine Threads sehen i.a. immer so aus ('Workerthreads'):
Delphi-Quellcode:
Das 'hndSemaphore' ist ein mit 'CreateSemaphore' erzeugtes Handle auf eine Semaphore. Das ist sowas wie ein Zähler.
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; 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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