Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sich überholende Events (https://www.delphipraxis.net/70427-sich-ueberholende-events.html)

UweR 30. Mai 2006 08:45


Sich überholende Events
 
Hallo Leute,

ich habe das folgende Problem:

Ich muß sicherstellen das ein eine Reihe von selbst generierten Events genau in der Reihenfolge abgearbeitet werden wie sie auch gepostet werden. Da ich innerhalb des Events z.B. auch Mails mit den Indys verschicke passiert es mir schon mal das Event Nummer 2 abgearbeitet wird obwohl Nummer 1 noch gerade ne Mail verschickt. Wie kann ich das verhindern ohne viel Aufwand zu betreiben. QAD reicht völlig, der Bug muß raus. Ne richtige Lösung gibts dann später.

Olli 30. Mai 2006 09:00

Re: Sich überholende Events
 
Gib doch einfach deinen Events eine "Seriennummer" mit. Und damit meine ich nicht irgendeine kryptische Zahlenfolge, sondern eben die Zahl, welche der Stelle in der Reihenfolge entspricht. Dann kannst du ja die weitere Ausführung solange unterbrechen bis eben die fehlende vorige Nachricht angekommen ist. Deswegen kannst du ja aber durchaus schon eine spätere Nachricht mit in die Warteschlange einreihen. Ich gehe mal davon aus, daß du eine Warteschlange hast, da ansonsten bei 1:1 Verarbeitung solche Probleme ja nicht autreten dürften.

NicoDE 30. Mai 2006 09:03

Re: Sich überholende Events
 
Es könnte helfen eine Critical Section in den Event-Handlern zu benutzen (allerdings ginge dabei die parallele Verarbeitung verloren) - just another hack.

UweR 30. Mai 2006 09:12

Re: Sich überholende Events
 
@OLLI

Nein ich habe keine Warteschlange. Mein Problem ist das innerhalb der Indys wohl irgendwo ein ProcessMessages aufgerufen wird und obwohl der 1 Event noch nicht abgearbeitet ist der nächste schon bearbeitet wird.

@Nico:

War meine erste Idee, funzt aber nicht da beide Events innerhalb eines Threads laufen.

Olli 30. Mai 2006 09:12

Re: Sich überholende Events
 
Zitat:

Zitat von NicoDE
(allerdings ginge dabei die parallele Verarbeitung verloren)

Sollte ja seinerseits kein Problem sein, weil er es ja serialisieren will :shock: :mrgreen:

Olli 30. Mai 2006 09:15

Re: Sich überholende Events
 
Zitat:

Zitat von UweR
Nein ich habe keine Warteschlange. Mein Problem ist das innerhalb der Indys wohl irgendwo ein ProcessMessages aufgerufen wird und obwohl der 1 Event noch nicht abgearbeitet ist der nächste schon bearbeitet wird.

Was sind es denn für Nachrichten? Reden wir von Fensternachrichten oder Nachrichten die über die Sockets verschickt und empfangen werden?

Und weshalb ist die Reihenfolge so wichtig - muß ja einen Grund geben.

UweR 30. Mai 2006 09:27

Re: Sich überholende Events
 
Das sind Fenstermessages.

Zitat:

Und weshalb ist die Reihenfolge so wichtig - muß ja einen Grund geben.
Da werden Daten ausgewertet die ein Indy-TCP-Thread einliest, in eine Liste schreibt und dann eben die besagte Message postet. Das Problem ist das halt die Daten z.T. von ihren Vorgängern abhängen. Dieser Umstand läßt sich leider auch nicht mal gerade eben ändern. Ist leider alles seit 10 Jahren gewachsen.

Die Weiterverarbeitung der Daten läßt sich aus Threadsicherheitsgründen leider nun mal auch nicht im Indy-Thread erschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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