4 Stimmen

Sicherste Weg, um Delphi-Anwendung in den Leerlauf zu warten, für Timer?

Ich mache eine Delphi-Anwendung, die auf meinem PC 24/7 im Hintergrund läuft und prüft, ob es einige Aktionen zu tun hat oder nicht, 30 Minuten warten und wieder prüfen, und so weiter.

Wie kann ich sicherstellen, dass die Anwendung die CPU oder den Speicher nicht überlastet, weil sie ständig läuft?

0 Stimmen

Wie kann man den Speicher freigeben/freigeben?

1 Stimmen

Solange Sie kein Speicherleck haben, brauchen Sie sich um den Speicher keine Sorgen zu machen. Wenn Sie ein Speicherleck haben, beheben Sie es. SysInternals ist hier Ihr Freund.

0 Stimmen

Ihre Anwendung laufen zu lassen ist bereits eine Verschwendung von CPU und Zeit, verwenden Sie den Windows Scheduler, wie der Typ unten vorschlägt!

0voto

PatrickvL Punkte 4036

Sie haben es nicht gesagt, aber wenn Ihre Anwendung mehr als einen Thread verwendet, könnte dies die Menge an CPU, die das Betriebssystem für Ihren Prozess aufwendet, erhöhen (lesen Sie z. B. über Zeitscheiben und Thread-Switches nach).

Das Betriebssystem kann auch einige Ihrer Speicherseiten auslagern, wodurch weniger Speicher verbraucht wird und/oder Speicherzugriffe in der "Wartezeit" reduziert werden.

Wenn Sie also nur einen Thread verwenden und auch keine zusätzlichen Nachrichtenschleifen haben, könnte der Aufruf von Sleep() ein guter Weg sein, da dies dem Betriebssystem signalisiert, dass Sie für eine lange Zeit keine Zeitscheibe mehr benötigen.

Vermeiden Sie YieldThread()/SwitchToThread() und Ihre eigene Zeitmessung (z.B. mit Now()), denn das würde bedeuten, dass viele Threadwechsel stattfinden, um nichts zu tun ....!

Eine andere Methode könnte sein, Folgendes zu verwenden WaitForMultipleObjects mit einem großen Timeout, damit Ihre Anwendung noch auf Nachrichten reagieren kann.

0voto

Nige Punkte 29

Ich würde vorschlagen, eine Dienstanwendung zu erstellen (Starttyp als automatisch festlegen) und CreateTimerQueueTimer als Zeitgeber zu verwenden. Speicherlecks können durch Reservieren von Speicheranforderungen/Pooling-Klassen abgeschwächt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X