Refresh
-
Servus!
Ich habe eine SDI Anwendung geschrieben, wo ich eine WndBar verwende. Darauf habe ich ein paar Button plaziert. Während das Prgramm arbeitet setzt es einige Buttons auf enabled bzw. disabled.
Dies mach ich für ein Button mit Hilfe der folgenden Methode:void CMainFrame::OnUpdateRun(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_modRun);
}Und das funktioniert! Kein Problem.
Nachdem ich in das Programm Methoden eingabaut habe, die viele Resoursen verbrauchen, (vermutte ich) packt das Programm nicht die Buttons zu refreshen.
Wie kann ich diesen "Fehler" beheben? Gibt es andere Möglichkeit die Buttons zu refreshen?Danke im voraus,
Gruß Krys
[ Dieser Beitrag wurde am 11.07.2003 um 09:03 Uhr von Krys editiert. ]
[ Dieser Beitrag wurde am 11.07.2003 um 09:04 Uhr von Krys editiert. ]
-
Wieviele Resourcen, welches Betriebssystem?
-
Mein Prozessor ist 100% ausgelastet und ich arbeite auf einer NT Maschiene.
-
Und kann mir niemand meine Frage beantworten?!
-
Ich vermute, dein Problem liegt darin, dass du die Methoden in die Dialogklasse gebaut hast und diese nun keine Gelegenheit mehr hat, die Message-Queue des Dialogs abzuarbeiten. Die saubere Lösung für dieses Problem wäre es, die rechenintensiven Aufgaben in einen Thread zu verlagern (zB CWinThread). Die einfachere Variante ist es, eine Methode "ProcessMessages" zu implementieren, welche die MessageQueue abarbeitet. Diese rufst du dann in der rechenintensiven Methode zyklisch auf:
void CMyDialog::ProcessMessages() { MSG msg; // Process existing messages in the application's message queue. // When the queue is empty, do clean up and return. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { if (!AfxGetThread()->PumpMessage()) return; } }Hope that helps.
-junix