Toon posts:

[Kylix] Grafisch & Performance

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een systeem dat bestaat uit een hoofdapplicatie A die vervolgens 2 x een ander programma start (B en C ==> dit zijn exact dezelfde applicatie's).

Bij die 2 applicatie's (B en C) wordt in het begin een soort screensaver van allerlei foto's achter elkaar getoond. Deze foto's worden allemaal omgezet naar een resolutie van 640 x 240. (Het kan dus zijn dat er bijv foto's gebruikt worden die standaard de resolutie hebben van 1600x1200).Dit gebeurt via de Stretch property.

Iedere keer als de foto getoond moet worden, wordt deze van de hardeschijf geladen en dus omgezet naar de juiste resolutie. Dit gaat allemaal gewoon goed.

Vervolgens wordt de screensaver bij B gestopt en wordt er een animatie van +- 40 frames achter elkaar getoond. Bij applicatie C draait de screensaver dan dus gewoon nog verder.

Het vreemde is dat bijv halverwege de animatie het systeem het druk krijgt met het laden, resizen van een foto voor systeem C en dat de animatie niet goed wordt afgespeeld. Animatie staat even "stil" en het laatste stukje schiet dan vervolgens heel snel voorbij. De bedoeling is uiteraard dat de animatie altijd vloeiend verloopt.

Maar ik snap dat niet helemaal. Linux geeft toch iedere applicatie x aantal milliseconden de tijd. Dus dan is het toch niet zo dat B en C van elkaar last kunnen hebben.


Nu weet ik misschien wel een oplossing. Ik zou een array van Images kunnen aanmaken waarbij ik bij het opstarten van applicatie B en C die helemaal vul met de foto's. Vervolgens hoef ik dan om de zoveel seconden geen foto's meer te laden en te resizen, maar alleen de nieuwe op visibile zetten en de oude verbergen. Maar ik denk niet dat dit een ideale oplossing is, omdat dat dan alle foto's in het geheugen worden geladen en het kunnen aardig wat foto's zijn.

Een andere oplossing is misschien om de TAnimate in een aparte thread laten werken?

Kortom kan iemand mij hier wat uitleg over geven wat het beste is en waarom applicatie B en C van elkaar last hebben (want ik zou zeggen linux geeft iedere applicatie net zoveel tijd, want de main thread's van beide applicatie's hebben dezelfde prioriteit)?

[ Voor 4% gewijzigd door Verwijderd op 22-05-2003 21:11 ]


  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 30-07 19:19
Je zegt het zelf : de applicatie's hebben dezelfde prioriteit. Als C staat te converteren, en je wilt B een animatie laten afspelen, dan kan het wezen dat C zoveel CPU-tijd inneemt, dat B niet genoeg overhoudt om realtime af te spelen. Je zegt zelf : Linux verdeelt de CPU-tijd in MS onder de applicaties. Dus als jij C en B draait, mogen die beide 50% CPU gebruiken. Is die 50% niet genoeg, dan krijg je haperingen in de animatie. Oftewel : de meest logische oplossing lijkt mij om de thread van C een lagere prioriteit te geven dan B.

Genoeg is meer dan veel, en tart den overvloed


Verwijderd

Topicstarter
NaliXL schreef op 23 May 2003 @ 00:38:Oftewel : de meest logische oplossing lijkt mij om de thread van C een lagere prioriteit te geven dan B.
Dat gaat niet omdat applicatie B en C hetzelfde zijn. Het kan dus dat dat screensaver bij C gestopt wordt en dat er vervolgens daar de animatie afgespeeld wordt.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Dan renice je de applicatie die aan het converteren is toch? Dan heeft de app die animatie afspeelt een hogere prio. Dat renicen kun je op runtime doen. Of je ook weer terug kan nice'en als je geen root bent weet ik niet zeker.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Ik las een tijdje terug iets over patches m.b.t. de resonse/performance van de gui.

Als appicatie B een x aantal seconden niets doet, en opeens veel cpu nodig heeft; krijgt applicatie B een interactivity-bonus(gelijk aan de x aantal seconden idle) .
Denk voor het doel van de patch aan een window op achtergrond, dat opeens naar de voorgrond geklikt wordt.

disclaimer: ik kan er ook helemaal naast zitten ;)

Verwijderd

Topicstarter
NaliXL schreef op 23 May 2003 @ 00:38:dan kan het wezen dat C zoveel CPU-tijd inneemt, dat B niet genoeg overhoudt om realtime af te spelen.
Applicatie C is bijvoorbeeld druk aan het rekenen. Maar in die tijd krijgt applicatie B geen tijd meer van het Operating System.

Kijk ik snap dat als je veel processen/applicatie's hebt draaien dat iedere applicatie dan minder tijd toegewezen krijgt. Hierdoor kan dan de animatie zich gaan "verslikken".

Maar dat is nu echt niet het geval. En toch zie je dat de animatie een tijdje stopt en dan pas weer verder gaat.
Gerco schreef op 23 May 2003 @ 07:25:Dan renice je de applicatie die aan het converteren is toch? Dan heeft de app die animatie afspeelt een hogere prio. Dat renicen kun je op runtime doen. Of je ook weer terug kan nice'en als je geen root bent weet ik niet zeker.
Waarom moet ik de applicatie's steeds gaan renicen (Ik weet trouwens niet precies wat het inhoudt)? Beide applicatie's hebben toch allebei dezelfde prioriteit, dus dat ze even veel tijd krijgen?


Trouwens ik begin me steeds meer te ergeren aan het grafische gebeuren onder linux. Dat heeft nog zo'n lange weg te gaan voordat het eens een keer normaal gaat werken....

Ik heb bijv een formulier met een bepaalde kleur. Hierop staat weer een panel met dezelfde kleur. De panel heb ik de alignment ingesteld op alClient. Op de panel staat een TImage met daarin een plaatje dat over de volledige breedte getoond wordt (d.m.v. stretch). Ook staat er nog een andere TImage, deze gebruikt niet de volledige grootte van het formulier. Als laatste heb ik een Label staan.

Als ik nu bij die Label de transparent aan en uitzet om de zoveel tijd, zie je de achtergrond kleur van of het formulier of de panel er door heen en daarna dan gelijk weer die 2 Image's daarboven.

Dat slaat toch echt nergens op! Het is echt super irritant.

[ Voor 3% gewijzigd door Verwijderd op 23-05-2003 17:13 ]

Pagina: 1