[MFC]
Ik had dus voor een programmaatje een soort van progresswindow gemaakt ( "Now running <blaat>" ) met een cancelbutton. Deze progresswindow draait in een aparte thread. De threadfunctie is gedeclareerd als :
zodat ik toegang heb tot de interne member variabelen van de CProgrammaClass. Ondermeer zijn er deze variabelen:
De Progressbarfunctie is ongeveer dit (ff snel in pseudocode):
Dit is allemaal volgens het Win32/MFC boekje.
Maar nu komt het !
Als ik bv in de functie CProgrammaClass::DoeIets() een thread begin met ProgressBarThread als functie en vervolgens m_sProgressText aanpas, dan doet ie dit mooi. de tekst in het venster verander. Als ik echter m_bHideProgress op TRUE zet, verbergt ie het venster niet. Het blijft gewoon heel lullig op het scherm staan.
Maarrrr
Als ik vlak daarna Sleep( 0 ); aanroep, verdwijnt dit wel

Dus deze code doet t niet:
terwijl dit perfect werkt
Ik zoek dus geen oplossing maar een verklaring hoe dit komt. Wie heeft een idee?
Ik had dus voor een programmaatje een soort van progresswindow gemaakt ( "Now running <blaat>" ) met een cancelbutton. Deze progresswindow draait in een aparte thread. De threadfunctie is gedeclareerd als :
code:
1
| static UINT CProgrammaClass::ProgressbarThread( LPVOID lpParam ); |
zodat ik toegang heb tot de interne member variabelen van de CProgrammaClass. Ondermeer zijn er deze variabelen:
code:
1
2
| CString m_sProgresstext; // de tekst die er op de progressdialog moet komen BOOL m_bHideProgress; // Zet op TRUE om de dialog af te sluiten, FALSE om hem te tonen |
De Progressbarfunctie is ongeveer dit (ff snel in pseudocode):
code:
1
2
3
4
5
6
7
8
9
10
| UINT CProgrammaClass::ProgressbarThread( LPVOID lpParam )
{
CProgrammaClass *pThis = (CProgrammaClass*) lpParam;
CreateAndShowProgressDialog();
while (!pThis->m_bHideProgress)
{
Verwerk_window_messages();
}
DestroyProgressWindow()
} |
Dit is allemaal volgens het Win32/MFC boekje.
Maar nu komt het !
Als ik bv in de functie CProgrammaClass::DoeIets() een thread begin met ProgressBarThread als functie en vervolgens m_sProgressText aanpas, dan doet ie dit mooi. de tekst in het venster verander. Als ik echter m_bHideProgress op TRUE zet, verbergt ie het venster niet. Het blijft gewoon heel lullig op het scherm staan.
Maarrrr
Als ik vlak daarna Sleep( 0 ); aanroep, verdwijnt dit wel
Dus deze code doet t niet:
code:
1
2
3
4
5
| bool CProgrammaClass::WerktNiet() AfxBeginThread( ProgressbarThread, this ); // doe iets wat tijd kost m_bHideProgress = TRUE; return true; |
terwijl dit perfect werkt
code:
1
2
3
4
5
6
| bool CProgrammaClass::WerktNiet() AfxBeginThread( ProgressbarThread, this ); // doe iets wat tijd kost m_bHideProgress = TRUE; Sleep( 100 ); return true; |
Ik zoek dus geen oplossing maar een verklaring hoe dit komt. Wie heeft een idee?