AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Priorität einer Anwendung

Ein Thema von runger · begonnen am 7. Mär 2005 · letzter Beitrag vom 8. Mär 2005
Thema geschlossen
Seite 2 von 2     12   
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#11

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 09:30
@runger,

Zitat:
Wir benutzen einen Timer, der sekündlich läuft, ... auszuwerten!
Was ist daran "ECHTZEIT"

Zitat:
Das heisst: jede Sekunde wird nachgeschaut ob im Tagesfahrplan ein Eintrag mit der aktuellen Uhrzeit steht.
Wenn das mal kein Ereignis ist.
Wer erzeugt den Eintrag im Tagesfahrplan. Und wo (Medium (( Datenbank, Arbeitsspeicher, Hardware-Schnittstelle)) ) wird es eingetragen.

Zitat:
Unser Problem besteht darin, dass wenn auf dem Rechner ein zweites oder drittes Programnm läuft,
der Timer verspätet ausgelöst wird und damit die aktuelle Sekunde bereits verstrichen ist.
Dafür würde ich nie und nimmer den TTimer verwenden.
Schau mal im google Bei Google suchenwindows echtzeit kernel

Zitat:
Eine Auslagerung in einen separaten Thread kommt aus anderen Gründen nicht in Frage.
Das muss man einfach respektieren, wenn man die Gründe kennt.
Ansonsten kann man es nur tolerieren.

Zitat:
Bemerkung: Mir ist schon öfter aufgefallen, dass du sehr persönliche (und auch verletzende)Antworten verteilst. Lass das bitte.
Das tut hier nichts zur Sache, und kann auch nicht als "verletzend" bewertet werden, was Luckie versucht hat dir zu erklären.
Viel schlimmer ist dein Zitat "Ich weiss was ich kann! Du auch?" ... und dann erzählst du was von Echtzeit im Sekundentakt
 
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#12

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 09:46
Zitat von Luckie:
Da ein Prozess keinen Code ausführt, kann man dessen Priorität auch nicht ändern, sondern man kann nur die Priorität der Threads verändern.
Selbstverständlich kann man die Priorität eines Prozess ändern.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
 
runger
(Gast)

n/a Beiträge
 
#13

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 10:24
Hallo,

das Problem hat sich erledigt!
SetPriorityClass(GetCurrentProcess,DWORD(THREAD_PR IORITY_IDLE));

Diesen Befehl in oncreate oder onshow des ersten Fensters fertig.

Rainer

An himutsu: vielen Dank! Dein beitrag hat mich weiter gebracht. Ist halt nicht immer so ganz einfach mit der Sucherei!
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#14

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 10:36
Also, wenn das so ist, dann last doch
a: das Programm in einer Schleife laufen, oder
b: stellt den Timer auf 20 ms ein (ist so das Kleinste, was TTimer kann)
(b ist dabei ja auch sowas wie eine Schleife ^^)

Delphi-Quellcode:
var MerkeZeit: irgendeinIntegertyp := 0;


Repeat // die Schleife ... oder Begin der Timerprozedur
  If MerkeZeit = AktuelleZeit Then Countinue; // oder Exit, bei der Prozedure
  MerkeZeit := AktuelleZeit;

  ... was auch immer (etwa Sekündlich)

Until ; // die Schleife ... oder End der Timerprozedur

Wenn Zeiten ni´ch in Sekunden vorhanden sind, dann muß halt entsprechend scaliert werden

z.B. Zeiten in Millisekunden:
Delphi-Quellcode:
  If MerkeZeit = AktuelleZeit div 1000 Then Countinue; // oder Exit, bei der Prozedure
  MerkeZeit := AktuelleZeit div 1000;



Wenn die Schleife also oftgenug aufgerufen wird, dann ist die Chance geringer, dass etwas verpasst wird.



Oder ihr macht es so, wie bisher, aber merkt euch die letzte Zeit, als euer Code ausgeführt wurde, wenn ihr dann das mit der aktuellen Zeit vergleicht, wisst ihr ja, wieviele der "letzten" Sekunden noch bearbeitet werden müssen, somit wird auch nichts vergessen.

Wie gesagt, Echtzeit gibt es bei Windows nicht und ihr müßt immer mal damit rechnen, dass mal euer Programm ein bissl ins stocken kommt.

[edit]
wieso ist der Beitrag nicht das 1. Mal eingefügt wurde? (zum Glück war alles nochim Speicher -.-'' )

[]
Bitte bitte ... manchmal sieht man halt den Wald vor Bäumen nicht
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 11:33
Zitat von Sprint:
Zitat von Luckie:
Da ein Prozess keinen Code ausführt, kann man dessen Priorität auch nicht ändern, sondern man kann nur die Priorität der Threads verändern.
Selbstverständlich kann man die Priorität eines Prozess ändern.
ja war etwas blöd ausgedrückt. Die Priorität eies Prozesses ergibt sich aus den Prioritäten von dessen Threads. Ändere ich die Basispriorität der Threads innerhalb des Prozesses, dann wird natürlich auch die Priorität des Prozesses geändert. Und mit MSDN-Library durchsuchenSetPriorityClass wird eben die Basisprioritöt der Threads geändert.

Zitat von runger:
ich hatte gefragt wie man zur Laufzeit die Priorität des eigenen laufenden Prozesses ändern kann.
Und genau das haben dir alle beantwortet.

Zitat:
Das heisst: jede Sekunde wird nachgeschaut ob im Tagesfahrplan ein Eintrag mit der aktuellen Uhrzeit steht.
Autsch. Das würde ich nicht mit einem Timer lösen. Wenn ich eine Einfluss auf die andere Anwendung hätte, dann würde ich immer eine Nachricht verschicken und mit der anderen Anwendung eben empfangen und immer wenn eine ankommt entsprechend reagieren.
Oder ich würde einen separaten Thread nehmen (Es würde mich ziemlich interessieren, warum das bei dir nicht geht.), denn ich immer mit Sleep(1000) lahmlege. Aber einen Timer würde ich auf keinen Fall nehmen.

Windows ist nachrichtenbasierend und kann so mit nie ein Echtzeitsystem sein. Selbst wenn du die Priorität deines Prozesses hochsetzt.

SetPriorityClass(GetCurrentProcess,DWORD(THREAD_PRIORITY_IDLE)); Der Cast nach DWORD ist überflüssig, THREAD_PRIORITY_IDLE ist bereits ein DWORD. Aber kannst du mir mal erklären, was du da machst? Die Prioritätsklassen für die API Funktion sind:
Zitat:
  • ABOVE_NORMAL_PRIORITY_CLASS
    Process that has priority above NORMAL_PRIORITY_CLASS but below HIGH_PRIORITY_CLASS.
    Windows NT and Windows Me/98/95: This value is not supported.
  • BELOW_NORMAL_PRIORITY_CLASS
    Process that has priority above IDLE_PRIORITY_CLASS but below NORMAL_PRIORITY_CLASS.
    Windows NT and Windows Me/98/95: This value is not supported.
  • HIGH_PRIORITY_CLASS
    Process that performs time-critical tasks that must be executed immediately. The threads of the process preempt the threads of normal or idle priority class processes. An example is the Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class application can use nearly all available CPU time.
  • IDLE_PRIORITY_CLASS
    Process whose threads run only when the system is idle. The threads of the process are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle-priority class is inherited by child processes.
  • NORMAL_PRIORITY_CLASS
    Process with no special scheduling needs.
  • REALTIME_PRIORITY_CLASS
    Process that has the highest possible priority. The threads of the process preempt the threads of all other processes, including operating system processes performing important tasks. For example, a real-time process that executes for more than a very brief interval can cause disk caches not to flush or cause the mouse to be unresponsive.
Die Konstanten, die du angegeben hast, gilt für MSDN-Library durchsuchenSetThreadPriority. Hast du mal im Taskmanger geguckt mit was für einer Priorität dein Prozess jetzt läuft? Außerdem dachte ich, du wolltest die Priorität hoch setzten. Jetzt hast du aber genau das Gegenteil gemacht. Dein Thread / Prozess bekommt jetzt nur noch Rechenzeit, wenn im System "nicht los ist". Bzw:
Zitat von PSDK:
For IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, and HIGH_PRIORITY_CLASS processes, the system dynamically boosts a thread's base priority level when events occur that are important to the thread.
Ich würde dir dazu mal empfehlen, mein Thread-Tutorial durch zu lesen.

Zitat von runger:
Bemerkung: Mir ist schon öfter aufgefallen, dass du sehr persönliche (und auch verletzende)Antworten verteilst. Lass das bitte.
Ach? Ich zitiere dich mal: "Red' ich chinesisch...". Im Gegensatz dazu war mein Beitrag ohne jegliche Gefühlsäußerung. Das einzige, was ich geamcht habe, ich habe gesagt,
Zitat:
Du redest nicht chinesisch nur verstehst du die Antworten nicht.
Weil hättest du die Antworten verstanden, dann wäre dieser Satz von dir überflüssig gewesen.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
runger
(Gast)

n/a Beiträge
 
#16

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 11:42
Hallo Luckie,

bitte lies meine Frage durch und die Antworten die ihr gegeben habt.

Dies hätte voll und ganz genügt:
SetPriorityClass(GetCurrentProcess,DWORD(THREAD_PR IORITY_IDLE));

(oder einen link darauf)

himatsu hat das gekonnt!

Rainer
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 11:50
Zitat von runger:
Dies hätte voll und ganz genügt:
SetPriorityClass(GetCurrentProcess,DWORD(THREAD_PR IORITY_IDLE));

(oder einen link darauf)
Und genau das hat himitsu gleich im ersten Posting gemacht. Also genau das was, du wolltest. Nur du warst wohl nicht in der Lage, dich mal länger als 10 Sekunden mit den Links zu beschäftigen.

Geschlossen, alles weitere per PN.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Thema geschlossen
Seite 2 von 2     12   


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 21:07 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