![]() |
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 |
Re: Priorität von Prozessen ändern
Zitat:
Hat man dann wirklich 100% der CPU für sich? Das System braucht doch auch Ressourcen! |
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 ;). |
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 |
Re: Priorität von Prozessen ändern
Zitat:
Zitat:
außerdem: Zitat:
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?? |
Re: Priorität von Prozessen ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Code:
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!
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; |
Re: Priorität von Prozessen ändern
Zitat:
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 |
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 |
Re: Priorität von Prozessen ändern
Liste der Anhänge anzeigen (Anzahl: 1)
datenkompression in aktion:
|
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. |
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