| Autor |
Beitrag |
Hochhaus
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 10:44
Hallo allerseits,
ich habe ein für mich nützliches Utility geschrieben. Es sollte die PC-Zeit einfrieren - für eine bestimmte Zeit. In der Realität läuft das Utility zeitweise / und zeitweise aber nicht: Es friert den PC so ein, dass andere Proggies wie WinWord nicht mehr aufstarten.
Weiss jemand Rat ? Gibt es einen besseren Weg ? Der Source-Code liegt als Zip-Datei bei ...
Gruss,
Hochhaus
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 12:00
Naja, du hast da ja eine Endlosschleife drin. Du lässt zwar zwischendurch vorhandene Messages abarbeiten, aber es gibt dennoch keine Pause (mit MsgWaitForMultipleObjects und einer Zeitabfrage z.B.).
Wahrscheinlich ist der Prozessor schlicht ausgelastet... Und wenn du keinen Mehrkernprozessor hast, ist damit alles blockiert.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 12:58
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ich habe aber nur Mehrkernprozessoren. Ausserdem funktioniert das Utility in 80 % der Fälle anstandslos - nur ab und zu taucht das Problem wieder auf ...!
Da habe ich jedoch noch eine Frage: Gibt es eine Sleep und/oder Delay-Funktion so, dass der Prozess 1 msec. ruht ? Wie binde ich die in mein Proggi ein ?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 13:10
Hochhaus hat folgendes geschrieben : | | Da habe ich jedoch noch eine Frage: Gibt es eine Sleep und/oder Delay-Funktion so, dass der Prozess 1 msec. ruht ? Wie binde ich die in mein Proggi ein ? |
Was hat es für einen Sinn zu versuchen so oft die Zeit zu setzen? So oft, dass auch die Millisekunden gleich bleiben, kannst du die gar nicht neu setzen. Und für sekundengenau reicht auch alle halbe Sekunde.
Da wäre es ja wohl einfacher, wenn du einfach die Funktionen hookst, mit denen Programme die Zeit abfragen können. Dann kannst du einfach selbst bestimmen welche Zeit denen mitgeteilt werden soll.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 13:18
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ich möchte aber, dass alle Datei + Directory-Einträge exakt dieselbe Uhrzeit aufweisen - mindestens auf die 1/10 sec. genau. Dies brauche ich für ein Backup-Projekt.
Gruss, Hochhaus
P.S. Mit 100 msec. Fehler ist es tolerierbar.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 13:28
Wie wäre es, wenn du einfach die Zeit der Dateien und Verzeichnisse setzt?
// EDIT:
Mal abgesehen davon ist das für ein Backup ja eigentlich eher hinderlich, aber das musst du ja wissen.
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 14:00
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ich weiss, wie man die Zeit der Dateien setzt. Bei den Verzeichnissen ist das aber anders: Keine Ahnung, wie ich das tun soll. Ich bitte um Rat.
Wie ich gemerkt habe, würde eine einfache Sleep-Funktion für den Prozess in meinem Programm ausreichen, um andere Prozesse in dieser Zeit auszuführen. Gibt es in Delphi eine solche Funktion ? Wie ruft man sie auf ?
Gruss,
Hochhaus
(Dies war eine dumme Frage. Ich habe die Sleep-Funktion nicht gefunden, weil sie der Hilfe-Index nicht auflistet)
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 16:20
Hochhaus hat folgendes geschrieben : | | Ich weiss, wie man die Zeit der Dateien setzt. Bei den Verzeichnissen ist das aber anders: Keine Ahnung, wie ich das tun soll. Ich bitte um Rat. |
Eigentlich genauso.
Du holst dir mit CreateFile ein Handle auf das Verzeichnis und benutzt damit dann SetFileTime um die Zeit zu setzen. In der Doku steht ja auch explizit, dass das mit Dateien und Verzeichnissen gleichermaßen geht.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 17:36
jaenicke hat folgendes geschrieben : | Naja, du hast da ja eine Endlosschleife drin. Du lässt zwar zwischendurch vorhandene Messages abarbeiten, aber es gibt dennoch keine Pause (mit MsgWaitForMultipleObjects und einer Zeitabfrage z.B.).
Wahrscheinlich ist der Prozessor schlicht ausgelastet... Und wenn du keinen Mehrkernprozessor hast, ist damit alles blockiert. |
Dies ist in der Tat so - der Prozessor ist ausgelastet. Der Taskmanager zeigt zeitweise 97 - 99 % ...! Die Abhilfe ist einfacher als gedacht: Im Endlosloop drin ein Sleep(10) einbauen, un das Problem ist gelöst.
Und auch die zweite Methode (Datei + Directory-Zeit setzen) dürfte problemlos funktionieren.
Vielen Dank für die prompte Hilfe !
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 17:42
Wie ich schon sagte, was die Pause angeht: jaenicke hat folgendes geschrieben : | | Pause (mit MsgWaitForMultipleObjects und einer Zeitabfrage z.B.). |
Nämlich so:
[url] www.delphipraxis.net...revisited.html[/url]
Dann blockierst du nicht unnötig komplett. Das kannst du natürlich auch gleich in deine Schleife einbauen, wie ich es eigentlich meinte.
Besser ist aber natürlich, die Zeiten gleich richtig zu setzen.
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 19:20
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
In der Beilage poste ich das fehlerbereinigte Utility. Vielleicht ist es ja noch für etwas nützlich. Der andere Weg, die Datei + Verzeichniszeit direkt zu setzen, ist vermutlich besser. Aber manchmal sieht man den Wald vor lauter Bäumen nicht mehr ... ...
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.01.11 19:39
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 22.01.11 19:50
Vielen Dank ! Die Schleife ist so viel besser + schlanker . Hier könnte man den Beitrag schliessen.
Moderiert von Martok: Fullquote entfernt
|
|