Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Timing problem

  Alt 7. Apr 2011, 23:37
Ein Sleep(0); gibt die Verarbeitung sofort an andere Threrads ab und beim nächsten Durchlauf wird sofort weitergearbeitet.
Wenn dein Programm wirklich für eine kurze Zeit nicht zu tun hat, kannst du damit die Rechenleistung an andere Programme weiterreichen.

Bei Multiprozessorsystemen sollte Windows dein exzesiv rechnendes Programm, bzw. deinen Thread auf einem Kern laufen lassen und nahezu alle anderen Threads auf die restlichen Kerne verteilen ... dann sollten die anderen Programme auch nicht mehr gestört werden.

Und wie schon gesagt, kannst du über die Prioritäten der anwendung und des entsprechenden Threads auch auf die CPU-auslastung Einfluß nehmen ... niedrige Priorität = mehr Zeit für Andere.

Aber egal was du machst, sobald du dein Programm irgendwie ausbremst, muß du auch damit rechnen, daß es eben ein bissl langsamer läuft und eventuell auch mal etwas stockt.

Tipp: Verschieb die Sounderzeugung in einen eigenen Thread und laß die Grafiksachen ruhig etwas langsamer rangehn (wenn die Grafik etwas/unmerklich stockt, isses ja nicht so schlimm)
und wenn es getrennt ist, dann können sich anzeige und grafik nicht mehr so leicht gegenseit sörten ... und veriß im Soundthread den "Mist" mit der Messagebehandlung.

[add]
Zitat:
Es ist definitiv so wenn ich die Schleife belasse kann ich selbst mit Winprocessmessages die Anwendung nicht mehr schließen.
Genau deswegen macht man auch rechenintensive/langwierige Dinge nicht im Hauptthread.

PS: Ein Multimediatimer ist quasi genau das Selbe wie ein TTimer (nur schneller).
Und ob ein Timer für dich die Lösung ist, mußt du selber wissen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Apr 2011 um 23:40 Uhr)
  Mit Zitat antworten Zitat