AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Delay

Ein Thema von PaKir · begonnen am 10. Mär 2005 · letzter Beitrag vom 19. Feb 2008
 
Benutzerbild von negaH
negaH

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

Re: Problem mit Delay

  Alt 18. Feb 2008, 12:53
Wenn du in einem Thread warten möchtest dann benutze WaitForMultipleObjects(). In WFMO() speicherst du bei Events ein Array auf deine Eventhandles ab und als Timeout setzt du meistens INFINITE. So wird der Thread gezielt schlafen gelegt und Windows weckt diesen bei einem Event auf. Da die RS232 Schnittstellen, vom Windows-API aus betrachtet, sowieso Eventbasiert sind und Overlapped arbeiten können, ist diese Vorgehensweise die Beste. Neben den Events die du für die Overlapped-Results und RS232 benötigst (WaitCommEvent usw.) kannst du zusätzlich nun auch Events anlegen die du zb. extern ausserhalb des Threadobjektes auf sichere Weise auslösen kannst. Zb. ein Terminierungsevent beim Zerstören des Threadobjekts ist so ein Fall. Du signalisierst dort ein Event, zb. EventThreadTerminate das im Array der Events von WaitForMultipleObjects enthalten ist. Wartet der Thread nun an dieser Stelle so löst das signalisierte Event die Rückkehr aus dieser WFMO() Funktion aus. Als Resultat bekommst du vom Windows mitgeteilt das es das ThreadTerminateEvent, also der Index in das Events Array, was das signalisierte. In einer nachfolgenden CASE Abfrage dieses Resultates kannst du also dann gezielt das Event zurücksetzen und die Threadproc verlassen. Auf Mainthread-Seite wird nach dem signalisieren mit ThreadTerminateEvent selber nun mit MsgWaitForMultipleObjects() und dem TThread.Handle auf diesen gewartet. Also erst wenn der Thread auf ThreadTerminateEvent reagiert hat und seine ThreadProc verlassen hat kehrt die Prozedur im MainThread zurück. So hat man sauber und ohne Rechenzeitverschwendung einen Thread terminiert.

Gruß Hagen

EDIT: au mann, meine Tippfehler sind immer wieder nervend. Scheiß M$-Keyboard.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:20 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