Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mehrere Befehle garantiert ohne Unterbrechung ausführen (https://www.delphipraxis.net/141924-mehrere-befehle-garantiert-ohne-unterbrechung-ausfuehren.html)

iphi 19. Okt 2009 09:24


mehrere Befehle garantiert ohne Unterbrechung ausführen
 
Hallo,

wie kann ich sicherstellen, dass einige zeitkritische Befehle in meinem Delphiprogramm im VCL-Hauptthread en bloc, also garantiert ohne Unterbrechungen durch das Betriebssystem/fremde Programme und durch Threads im eigenen Programm abgearbeitet werden?

-Helfen critical sections weiter?
-Muss ich kurzzeitig die Priorität meines Programmes erhöhen?
-???

Gruß, Thomas

jfheins 19. Okt 2009 09:29

Re: mehrere Befehle garantiert ohne Unterbrechung ausführen
 
Gar nicht.

Du kannst zwar diene Priorität auf Echtzeit stellen, aber 1. Ist das sehr unschön und 2. scheitert das, wenn ein anderer Prozess ebenfalls Echtzeit-Priorität anfordert.

JamesTKirk 19. Okt 2009 09:32

Re: mehrere Befehle garantiert ohne Unterbrechung ausführen
 
Hi!

Um gegen Threads im eigenen Programm abzusichern helfen CriticalSections, das heißt aber nicht, dass diese anderen Threads nicht auch laufen. Auch kannst du nichts dagegen machen, dass das Betriebssystem einen anderen Thread/Prozess als aktiv auswählt (das Betriebssystem hat hier die absolute Oberhand). Und wenn das schon nicht genug ist, dann denk mal an Multicore-Systeme, in denen IMMER mindestens zwei Threads (je nach Anzahl der Cores) laufen.

So... nachdem die Unmöglichkeit einer solchen Idee dargelegt wurde, jetzt eine Gegenfrage:

Was willst du denn genau machen? Vielleicht gibt es eine bessere Möglichkeit als "Ich will alle CPUs für mich und nur für mich allein" ;)

Edit: Roter Kasten gesehen und (auf Grund einer verschiedenen Thematik der Antwort) ignoriert.

Gruß,
Sven

himitsu 19. Okt 2009 10:04

Re: mehrere Befehle garantiert ohne Unterbrechung ausführen
 
Wie lange dauern denn diese Befehle?

und was sind das für welche ... bzw was machen die, daß es soooo wichtig ist, daß sie zusammenbleiben?


setze einfach mal ein Sleep(0) davor, dann wird an dieser Stelle die Abarbeitung an andere Threads/Prozesse abgedeben
und danach laufen die nächsten Befehle in einem neuen Zeitfenster an und da sie dann das komplette Fenster und damit die maximale Zeit ur Verfügung haben, ist dort die Wahrscheinlichkeit groß, daß sie auch unterbrechungsfrei laifen (wenn sie nicht länger als ihr Zeitfenster brauchen).

Und Critical-Sections bringen garnichts, da andere Anwendungen davon garnichts mirbekommen. :zwinker:



Die Thread-/Prozesspriorität kann man zwar erhöhen
und dieses würde theoretisch das verfügbare Gesamtzeitspanne für die Abarbeitung vergrößern, aber es ist dennoch nicht sichergestellt, daß diese Befehle dennoch nicht getrennt werden.

- z.B. kann diese Befehlsgruppe dann immernoch kurz vor Ende erst gestartet werden
(Lösung sehe oben)

- und dann ist nicht bekannt, wie Windows die Reihenfolge und Abarbeitung plant,
demnach kann auch bei extrem hoher Prozeßpriorität das mögliche Zeitfenster sich nicht vergrößern, sondern es könnte sich auch nur die Häufigkeit erhöhen und es könnte demnach sein, daß die Prioritätsänderung diesbezüglich überhaupt nichts bringt.


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