Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti.......vi spiego qualè il problema:
Praticamente sto lavorando ad un programma che per compiere determinate operazioni nel WM_PAINT (o anche ne WM_TIMER) impiega svariati secondi....il problema è che quando impiega un tot numero di secondi (meno di una decina)il programma non risponde e sono costretto a terminarlo tramite taskmanager. Il fatto è che una volta che si blocca lo si può lo stesso fermare per analizzarlo in debug mettendo un BreakPoint nella WM_TIMER e ciò mi insospettisce! in pratica il programma continua a funzionare non da segni.....ecco....credo di essermi spiegato. avete suggerimenti?
S.O. Windows 7 Professional 32 bit
Compilatore/IDE: Sia DevC++ 5 che MSVC++2010Express
Sto utilizzando le API di Win32.
Intanto grazie, comunque per XBarboX:
Non ho idea di cosa sia un thread, mi pare di aver letto che permette di svolgere istruzioni in contemporanea??? Per Lorenzo:
Ecco il codice:
Codice sorgente - presumibilmente C/C++
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdcWindow;
hdcWindow = BeginPaint(hwnd, &ps);
//Questo serve a ridisegnare le varie assonometrie dello spazio 3d se si //preme una freccia direzonale.
In pratica il problema sta nei tre cicli annidati che in totale si ripetono 343000volte.
MI SCUSO SE IL CODICE è ESTREMAMENTE SCOMMENTATO MA DOVREBBE ESSERE ABBASTANZA INTUITIVO, PER QUALSIASI CHIARIMENTO CHIEDI PURE
Ultima modifica effettuata da Dany il 17/08/2012 alle 21:41
1) ad OGNI repaint della finestra deve essere eseguita tutta quella roba? Non si può ottimizzare in qualche modo? Magari ridisegnando solo la parte invalidata...
2) varrebbe la pena di usare il double buffering? Potrebbe aumentare la velocità di esecuzione.
3) si può usare un thread? Se la GUI principale deve smistare i dati, non può certo essere utilizzata per fare calcoli. Il thread esegue "a parte" tutti i calcoli, passando poi alla GUI il risultato(magari usando il punto 2)
Grazie, ma ora ti spiego:
Il problema non sta nel fatto che WM_PAINT deve ripetersi ogni volta ma sta nel fatto che deve fare tutta quella roba e fa "congelare il programma"....inoltre Potresti spiegarmi gentilmente cosa sia il double buffering? credo venda usato nei programmi tipo MSPaint....mi accontento anche di un link....
Comunque ho risolto, è bastato creare una funzione che corrispondeva alla DoEvents in VB ed eliminare la penna=CreatePen(...); che evidentemente se ripetuta troppe volte in un ciclo portava al blocco dell'applicazione...Grazie lo stesso