AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi MsgWaitForMultipleObjects vs WaitForMultipleObjects
Thema durchsuchen
Ansicht
Themen-Optionen

MsgWaitForMultipleObjects vs WaitForMultipleObjects

Ein Thema von DataCool · begonnen am 12. Dez 2003 · letzter Beitrag vom 1. Jul 2005
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

MsgWaitForMultipleObjects vs WaitForMultipleObjects

  Alt 12. Dez 2003, 15:39
Hi Leute,

folgende Situation :

Ich habe einen Arbeiter-Thread der Daten die in einem TList Object gespeichert werden, sequentiel abgearbeitet werden.
Das TList-Object schütze ich mit einer CriticalSection !
In meinem OnExecute Ereigniss des Threads warte ich mit im Moment MsgWaitForMultipleObjects auf zwei Events :
CloseEvent --> der Threads soll beendet werden
WorkEvent --> Es sind Daten in die Verarbeitungsschleife eingestellt worden. Die abgearbeitet werden müssen.

Jetzt habe ich in der Windows Api Hilfe von Delphi folgenden Satz zu MsgWaitForMultipleObjects gefunden :
Zitat:
Note that MsgWaitForMultipleObjects doesn't return if there was previously unread input of the specified type in the queue. It only wakes up when input arrives.
Zu WaitForMultipleObjects ist dieser Hinweis nicht vorhanden !

Meine Events erzeuge ich im Moment mit :
Code:
  // Zweiter Parameter = false ---> Auto-Reset des Events
  hCloseEvent := CreateEvent(nil, False, False, 'EndmyWorkerThread');
Jetzt habe diverse andere Threads die Nachrichten für diesen Thread Nachrichten zur Verarbeitung einstellen.
Nach der Einstellung der Nachricht,signalisieren die Threads das WorkEvent.
Jetzt habe ich festgestellt das im "Schlimmsten Falle" zwei oder mehr Threads gleichzeitig den WorkEvent signalisieren, obwohl das auch über syncronize geschieht.

Das Problem ist jetzt zwei Threads stellen eine Nachricht ein, der erste Thread signalisiert das WorkEvent, der Arbeiter-Thread fängt an die Nachricht abzuarbeiten, während der Arbeiter-Thread arbeitet signalisiert der zweite Thread ebenfalls das OnWork Event.
Jetzt ist der Arbeiter-Thread mit seiner Verarbeitung fertig, und wartet wieder auf das nächste OnWork-Event.
Dieses tritt aber nicht ein, da anscheinend das OnWork-Event von Thread 2 verworfen wurde und nicht im Message queue erhalten bleibt.

Was mache ich jetzt um diese Situation zu umgehen ?

Hilft die Verwendung von WaitForMultipleObjects anstatt MsgWaitForMultipleObjects ?
Oder könnte es helfen die Events nicht automatisch zu reseten, sondern dies mit ResetEvent zu tun ?

Ich hoffe ich konnte das Problem verständlich ausdrücken *g

Gruß DAta
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: MsgWaitForMultipleObjects vs WaitForMultipleObjects

  Alt 1. Jul 2005, 14:39
MsgWaitForMultipleObjects() hat einzig den Vorteil, daß man "entweder oder" auf Fensternachrichten und Ereignisse (Handles) warten kann. Die andere Funktion wartet nicht auf Nachrichten.

Auf diese Nachrichten wird mit "Input" im oben zitierten Text hingewiesen.
  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 08:17 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