View Full Version : Scheduler di windows
In questo periodo sto usando un programma che gira troppo velocemente e non mi consente di vedere bene alcune animazioni.
Vorrei rallentarlo dicendo allo scheduler di windows di riservargli non più del 10% dei cicli macchina nell'unità di tempo. Il resto lasciarlo all'Idle del sistema.
Esistono API che mi consentono di fare ciò ?
Daniels118
04-08-2014, 07:31
Per quanto ne so è possibile impostare la priorità dei processi, non limitarne l'utilizzo delle risorse. Ciò significa che se non ci sono altri processi pesanti, il processo a bassa priorità può comunque utilizzarne il 100%.
Per abbassare la priorità basta utilizzare il task manager, individui il processo, click con il tasto destro e imposti la priorità bassa, però come ti dicevo prima non otterrai i risultati sperati.
Forse avresti più fortuna limitando l'utilizzo massimo della cpu per l'intero sistema, puoi farlo dalle opzioni di risparmio energetico.
Puoi anche abbassare la frequenza di clock dal bios.
Per quanto ne so è possibile impostare la priorità dei processi, non limitarne l'utilizzo delle risorse. Ciò significa che se non ci sono altri processi pesanti, il processo a bassa priorità può comunque utilizzarne il 100%.
Per abbassare la priorità basta utilizzare il task manager, individui il processo, click con il tasto destro e imposti la priorità bassa, però come ti dicevo prima non otterrai i risultati sperati.
Forse avresti più fortuna limitando l'utilizzo massimo della cpu per l'intero sistema, puoi farlo dalle opzioni di risparmio energetico.
Puoi anche abbassare la frequenza di clock dal bios.
Abbassare la priorità del processo però è inutile se non c'è qualcosa che assorbe le risorse eccedenti...
Abbassare il clock rallenta tutto il computer, ridurre il numero di cpu per il processo è inutile se il programma è già single thread.
Io vorrei qualcosa di modulabile in modo fine, come fosse una moviola (solo in avanti ovvio). Tipo
1%,
2 %
3,87% etc.
In questo modo potrei fare un programma che tramite la rotellina del mouse mi consente di accelerare o rallentare l'animazione a piacimento.
Il programma originale ha già una ragolazione della velocità a 32 livelli ma il problema è che dalla 1 alla 31 l'incremento è graduale, dalla 31 alla 32 c'è un salto pauroso.
Invece io vorrei poter impostare lo slide del programma originale a 32 e poi regolare la velocità con software esterno che agisce sullo scheduler.
E' possibile ?
Daniels118
04-08-2014, 14:43
Non credo, almeno su windows. Potresti installare una macchina virtuale e farvi girare il programma all'interno, sulla macchina virtuale puoi sicuramente limitare l'utilizzo delle risorse. Tieni presente però che ridurre le risorse a disposizione non vuol dire produrre un rallentamento fluido, piuttosto andrà a scatti.
Quello che vuoi lo puoi ottenere solo per questo programma specifico armandoti di debugger e modificando la frequenza del timer che gestisce l'animazione. Successivamente puoi anche creare un tool che ti consente di modificare tramite il mouse questo valore.
fai prima a fare uno screencast ( registrare un video di quello che accade sul desktop ) e riguardarti il video in slow motion.
cdimauro
04-08-2014, 18:11
In questo periodo sto usando un programma che gira troppo velocemente e non mi consente di vedere bene alcune animazioni.
Vorrei rallentarlo dicendo allo scheduler di windows di riservargli non più del 10% dei cicli macchina nell'unità di tempo. Il resto lasciarlo all'Idle del sistema.
Esistono API che mi consentono di fare ciò ?
Purtroppo no, ma puoi giocare controllando il processo in questione, sospendendolo e riattivandolo (http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows) programmaticamente, a seconda di come si comporta l'applicazione.
Purtroppo no, ma puoi giocare controllando il processo in questione, sospendendolo e riattivandolo (http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows) programmaticamente, a seconda di come si comporta l'applicazione.
Quindi posso creare una serie di sospensioni/riattivazioni tanto ravvicinate da dare le sensazione di un rallentamento fluido. Utilizzare una specie di modulazione PWM, regolando il dutycycle degli ON-OFF.
Voglio dire, se creo un ciclo di ON-OFF dove ho ON per x% del tempo e ho OFF per 100-x % del tempo, variando x posso modulare al millimetro la velocità di esecuzione. Basta che la frequenza sia abbastanza alta, allo stesso modo dei variatori di luce.
No?
L'unico dubbio è che se i transitori tra l'ON e l'OFF sono troppo lunghi allora ho l'effetto scattoso. Però per verificare quello mi sa che l'unica è provare.
Non credo, almeno su windows. Potresti installare una macchina virtuale e farvi girare il programma all'interno, sulla macchina virtuale puoi sicuramente limitare l'utilizzo delle risorse. Tieni presente però che ridurre le risorse a disposizione non vuol dire produrre un rallentamento fluido, piuttosto andrà a scatti.
Quello che vuoi lo puoi ottenere solo per questo programma specifico armandoti di debugger e modificando la frequenza del timer che gestisce l'animazione. Successivamente puoi anche creare un tool che ti consente di modificare tramite il mouse questo valore.
Un tool che vada a modificare direttamente l'assembler caricato in RAM non credo si possa fare. Penso che i moderni sistemi (credo dai tempi del 386 con l'introduzione della modalità protetta) operativi inibiscano queste cose per evitare che la gente si diverta con i virus. Non so se poi esiste qualche trucchetto ma mi pare complicata come soluzione
fai prima a fare uno screencast ( registrare un video di quello che accade sul desktop ) e riguardarti il video in slow motion.
E' un programma che uso spesso, mi piacerebbe una soluzione pulita.
In passato mi sono imbattuto in un problema simile e ho risolto con questo http://mion.faireal.net/BES/
Fai partire il programma rognoso, poi questa utility. Selezioni il processo nell'elenco e poi giochi un po' con i controlli finché non arrivi ad un risultato soddisfacente.
cdimauro
05-08-2014, 06:36
L'uovo di Colombo. :p
@das: sì, l'idea è proprio quella.
Daniels118
05-08-2014, 07:33
[..]
Un tool che vada a modificare direttamente l'assembler caricato in RAM non credo si possa fare. Penso che i moderni sistemi (credo dai tempi del 386 con l'introduzione della modalità protetta) operativi inibiscano queste cose per evitare che la gente si diverta con i virus. Non so se poi esiste qualche trucchetto ma mi pare complicata come soluzione
[..]
Si può fare, l'api di windows include delle funzioni per il debugging che consentono di accedere direttamente alla memoria di un altro processo. Sul fatto che sia abbastanza complicato non posso darti torto.
La soluzione di cdimauro è sicuramente più semplice e va bene per qualunque processo, credo che il programma indicato da VICIUS funzioni proprio in questo modo. Tieni presente però che anche in questo caso non vai a ridurre semplicemente il frame rate, ma togli risorse al processo di rendering. Sicuramente vale la pena provare, ma la fluidità non è garantita.
Provato qualcosa tipo Cheat Engine? Ha una funzione apposita per regolare la velocità di esecuzione del programma.
Provato qualcosa tipo Cheat Engine? Ha una funzione apposita per regolare la velocità di esecuzione del programma.
In effetti sembrerebbe che questo cheat engine serva proprio a questo. Stasera lo provo e vi faccio sapere
Ottimo!! Cheat Engine fa esattamente quello che mi serve. Tra l'altro è un ottimo programma che supporta script LUA ha un IDE e consente di manipolare le applicazioni come ci pare. Consigliatissimo per rislovere una marea di problemi.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.