Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Priorität von Prozessen ändern (https://www.delphipraxis.net/27746-prioritaet-von-prozessen-aendern.html)

DaFox 19. Aug 2004 20:48

Re: Priorität von Prozessen ändern
 
Hi.

In Deinem Fall ist das OpenProcess wohl witzlos, denke ich.

Schau' Dir mal GetCurrentProcess() an.
Wenn Du unbedingt die ProcessId haben willst, dann GetCurrentProcessId().

Gruß,
Markus

Tubos 19. Aug 2004 21:02

Re: Priorität von Prozessen ändern
 
Zitat:

Ich brauche für einen Thread meines programms den prozessor über einen Zeitraum von ein paar Minuten ohne Unterbrechung für mich alleine
Dazu eine Frage von mir:
Hat man dann wirklich 100% der CPU für sich?
Das System braucht doch auch Ressourcen!

Vjay 19. Aug 2004 22:02

Re: Priorität von Prozessen ändern
 
Windows ist kein Realtime-Betriebssystem.
Für deine Zwecke gibt es einige Unixe, denn du kannst nie sicherstellen dass du auf 100% cpu läufst, Interrupts erzeugen wie der Name schon sagt auch Verzögerungen.

Es ist unter windows absolut unmöglich 100% zeitnah zu arbeiten. Du könntest dies nur durch externe Hardware die die Werte zwischenspeichert erreichen. Ansonsten wird es dir durch Prioritätserhöhung nur gelingen dich einem Realtime - System anzunähern, aber du wirst es nicht erreichen können ;).

Vjay 19. Aug 2004 22:10

Re: Priorität von Prozessen ändern
 
Achja, nochwas au weia au weia. Deine Abfragefunktion, ob die Lichtschranke unterbrochen wurde erzeugt ja auch eine Verzögerung :-D + Das auslesen der Uhrzeit, die ja glaube ich auch auf 22msec ungenau ist.

Also denke mit Windows (98?!!) wird es das Beste sein den Thread auf Realtime zu setzen, und die Messung zwischen dem Unterbrechen der 2 Lichtschranken mehrmals durchzuführen. Denke dann wirst du einen guten Durchschnittswert erhalten.

Du hast ja schließlich eine Verzögerng bei der Start und bei der Ziel-Lichtschranke, das dürfte sich dann in der Summe aufheben.

Mfg
Vjay

Tubos 20. Aug 2004 13:09

Re: Priorität von Prozessen ändern
 
Zitat:

Windows ist kein Realtime-Betriebssystem.
Für deine Zwecke gibt es einige Unixe, denn du kannst nie sicherstellen dass du auf 100% cpu läufst, Interrupts erzeugen wie der Name schon sagt auch Verzögerungen.
Danke!

Zitat:

Deine Abfragefunktion, ob die Lichtschranke unterbrochen wurde erzeugt ja auch eine Verzögerung + Das auslesen der Uhrzeit, die ja glaube ich auch auf 22msec ungenau ist.
QueryPerformanceCounter, QueryPerformanceFrequency heißt die Lösung :)
außerdem:
Zitat:

ich hab einen Wagen, der an diversen Lichtschranken vorbei fährt und ich muss geschwindigkeiten, beschleunigung etc. errechnen
Wenn er beim Start und beim Ziel dieselbe Verzögerung hat, ist das kein Problem.
Doch wenn beim Start gerade eine winzige Unterbrechung (durchs System) ist, und beim Ziel keine, dann ist es wieder ungenau... :drunken:
Aber wofür braucht man bei einem Wagen, der an Lichtschranken vorbeifährt, eine Genauigkeit im ms-Bereich??

Borti 22. Aug 2004 19:04

Re: Priorität von Prozessen ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Das System braucht doch auch Ressourcen!
so, ich hab das ganze mal mit folgendem Code getestet:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var h1,h2:THandle;
    s:Tstrings;
    i:integer;
begin
  h1:=GetCurrentProcess;
  h2:=GetCurrentThread();
  if not SetPriorityClass(h1,REALTIME_PRIORITY_CLASS) then showmessage('Fehler!');
  if not SetThreadPriority(h2,THREAD_PRIORITY_TIME_CRITICAL) then showmessage('Fehler!');
  s:=TStringList.Create;
  for i:=0 to 1000000 do begin
   s.Add(inttostr(GetTickCount));
  end;
  s.SaveToFile('...\CPU-Test.txt');
  s.Free;
  Form1.Close;
end;
Die Datei CPU-Test.txt hab ich als Attachment angehängt. ich hab aber nur Abweichungen von 5msec. festgestellt. Eigentlich müssten es doch 22 sein!

Tubos 22. Aug 2004 19:59

Re: Priorität von Prozessen ändern
 
Zitat:

Die Datei CPU-Test.txt hab ich als Attachment angehängt. ich hab aber nur Abweichungen von 5msec. festgestellt. Eigentlich müssten es doch 22 sein!
GetTickCount liefert die ms seit Systemstart und hat eine Genauigkeit von 5 ms.
Das hat nichts mit den Prozessen und den 22-ms-Zeitscheiben zu tun.

Wieso willst du den Prozess eigentlich auf Echtzeit setzen, wenn du mit sowas ungenauem wie Gettickcount arbeitest?
edit:
achso, das war nur als test...ok

Borti 25. Aug 2004 16:21

Re: Priorität von Prozessen ändern
 
Aber, wenn mein thread kurz für einen anderen unterbrochen wird, dann müsste ich doch dann eine Lücke von 22msec. haben, oder?
Mit QueryPerformanceCounter ist das so eine Sache, da das Programm auch auf rRechnern mit Win32 laufen soll.
Gruß,
Borti

nailor 25. Aug 2004 16:26

Re: Priorität von Prozessen ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
datenkompression in aktion:

Borti 29. Aug 2004 08:57

Re: Priorität von Prozessen ändern
 
irgendwie versteh ich nicht, was du damit sagen willst. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Seite 2 von 3     12 3      

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