2012-09-25 11 views
10

Sto lavorando all'applicazione MDI scritta in C++ Builder 2010. Quando la finestra secondaria è in uno stato ingrandito, l'applicazione consuma il 100% del tempo della CPU in modalità inattiva.L'applicazione MDI consuma il 100% della CPU in idle

Ho usato il profiler 'Very Sleepy' e mostra che la funzione Sd_childFinalize utilizza il 99% delle risorse della CPU ma non riesco a trovarla nel mio codice. sd_Child.cpp è l'unità C++ in cui è definita la classe del modulo figlio MDI. Ho trovato solo il simbolo @@[email protected] nel file eseguibile. Per favore aiutami a capire come eseguire il debug di questo problema.

+0

Perché stai ancora utilizzando MDI nel 2012? E 'stato deprecato tanto, tanto tempo fa. –

+0

L'ho già visto in Delphi. In cima alla mia testa non riesco a ricordare alcun dettaglio. –

+0

'sd_Child.cpp' non fa parte dell'installazione standard di C++ Builder sulla mia macchina, e proprio come' MDI' si riferisce a 'Multiple Document Interface',' SDI' di solito si riferisce a 'Single Document Interface', che non sarebbe parte di un framework di applicazione MDI. Stai usando un pacchetto di terze parti di qualche tipo? –

risposta

13

Questo sembra essere un problema noto relativo alle azioni e al modo in cui vengono aggiornate nel gestore di inattività dell'applicazione. Il seguente rapporto di controllo di qualità descrive lo scenario: http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

La soluzione al vostro problema, secondo il rapporto di controllo di qualità, è quello di impostare la proprietà TApplication.ActionUpdateDelay su un valore maggiore di 0.

Quello che mi piacerebbe sapere è il motivo la presenza di un modulo client massimizzato fa sì che DoActionIdle di VCL venga chiamato in un ciclo occupato. Presumibilmente l'esecuzione del gestore OnUpdate di un'azione porta a un altro messaggio in coda e ad altri cicli di inattività e così via. Avrei pensato che affrontare questo sarebbe il modo migliore per affrontare questo problema, ma forse è difficile da raggiungere.

+0

Si noti che [QualityCentral è stato chiuso] (https://community.embarcadero.com/blogs/entry/quality-keeps-moving-forward), quindi non è più possibile accedere ai collegamenti 'qc.embarcadero.com' . Se è necessario accedere ai vecchi dati QC, consultare [QCScraper] (http://www.uweraabe.de/Blog/2017/06/09/how-to-save-qualitycentral/). –